C++篇之命名空间与引用

命名空间
using namespace ::std //使用标准的命名空间,命名空间是用来解决全局变量的命名冲突的问题。

这里写代码片
    #include <iostream>
    using namespace ::std;//使用标准的命名空间
    namespace one{      //定义第一个命名空间
    int M = 200;
    int inf = 10;   
}
    namespace two{      //定义第二个命名空间
    int x;         //全局变量,和C中的一样
    int inf = 100;  
}
    int main(int arg,char *argv[])
    {
        using two::x;
        cout<<x<<endl;  //0
        x = -100;
        one::inf *= 1;
        cout <<one::inf<<endl;  //10
        cout <<one::M<<endl;  //200
        two::inf *= 2;
        cout<<two::inf<<endl; //200
        cout<<x<<endl;  //-100
        return 0;   
    }

C语言的参数传递是按值传递,C++中按值传递和按引用传递,按引用传递的实质还是指针。
引用和引用参数
引用
1 引用是别名,在声明时必须初始化,在实际代码中主要用作函数的形式参数
2 引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。
3 为了建立引用,需要先写上目标的类型,再加上引用运算符“&”,然后是引用的名字。
举例:
int intone;
int &rint = intone;//rint就是引用的名字,&引用运算符,目标类型是int ,初始化为intone,以后对rint的改动就是对intone 的改动。intone的地址和rint的地址一样。
&只有在声明引用时是引用操作符,其他时候都是地址操作符。
引用和变量指向同一个单元,引用一旦初始化它就维系在一定的目标上再也不分开。

由于指针也是一个变量,可以有指针变量的引用,举例说明
int *a = NULL;
int * &rpa = a;//int *类型的引用,初始化为a
int b = 8;
rpa = &b;//rpa是a的别名,也是个指针。
不能建立引用的数组,没有引用的指针和引用的引用。有空指针没有空引用。

引用的参数传递
1 传递引用给函数和传递指针的效果一样。

void swap(int &x,int &y)//引用作为参数

int temp;
temp = x;
x = y;
y = temp;

使用引用作为参数和返回值给函数的意义?
1函数只能返回一个值,如果程序需要从函数返回两个值怎么办?用引用给函数传递两个参数,然后由函数往目标中填入正确的值。
2 函数返回值时,要生成一个副本,而引用作为返回值时不生成值的副本,所以提高了效率。

猜你喜欢

转载自blog.csdn.net/Allone2333/article/details/81431472