&操作符浅析

类别:编程语言 点击:0 评论:0 推荐:
&操作符浅析 & operator用法 1.      &地址操作符

  &可以获取C++中基本类型,结构,累,集合类型的地址 . 下面一个例子中, &操作符取得数组nArray中第三个元素的地址

// Example of the address-of operator

int *pPtr;

int nArray[20];

pPtr = &nArray[2];

2.      & Bit与操作符

  &操作符把两个数据进行按位与操作 .

// Example of the bitwise-AND operator

int nNumA=1, nNumB=3, nNumC; // 00000001, 00000011

 

nNumC = nNumA & nNumB;       // nNumC is now 1 3.      &做为引用操作符的最基本用法:

  用在函数参数的传递中. C++函数参数传递有三种方式. 值,指针,引用 . 引用在存储方面表现的像指针,引用也是保存着对象(object)的地址 . 但是与指针方式不同的是 , 引用在使用方面表现的像值传递 .  下面是一个基本的例子:

void AddIt(int& x)

{

      x += 2;

}

 

int x;

x = 3;

AddIt(x);

printf("%d, x) ;   // the value of x is now 5

4.      函数返回,引用传递代替值传递

  如果函数返回值是一个对象,有些场合用 ‘引用传递’代替’值传递’可以提高效率 .

String & String::operate =(const String &other)

    {  

       // (1) 检查自赋值                     // 4分

       if(this == &other)

           return *this;

   

// (2) 释放原有的内存资源            // 3分

       delete [] m_data;

      

       // (3)分配新的内存资源,并复制内容 // 3分

    int length = strlen(other.m_data);

    m_data = new char[length+1];         // 若能加 NULL 判断则更好

        strcpy(m_data, other.m_data);

      

       // (4)返回本对象的引用            // 3分

       return *this;

}  

对于赋值函数,应当用”引用传递”的方式返回String对象.如果用’值传递’的方式,虽然功能仍然正确,但是由于return语句要把*this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率 .

String a,b,c;

a = b;        // 如果用“值传递”,将产生一次 *this 拷贝

a = b = c;    // 如果用“值传递”,将产生两次 *this 拷贝

5.      指针的引用

  对于C + +中的引用,语法清晰多了。函数参数变成指针的引用,用不着取得指针的地址。通过运行下面的程序,将会看到指针本身增加了,而不是它指向的内容增加了。

Void increment(int*& i){i++;}

Main()

{

  int* i=0;

  cout<< “i=”<<i<<endl;

  increment(i);

  cout<<”i=”<<i<<endl;

}

6.      函数参数使用 const &

 

因为函数如果是值传递的话 , 函数会先构建一个临时对象,这会消耗一定的时间(构造函数,析构函数) . (当然int , bool这种基本数据类型除外) . 所以我们参数传递使用const & , 可以省去临时对象的构造和析构过程,从而提高的效率 .

参考资料

ü        MSDN

ü        高质量C++编程 (林锐)

ü        C++ Primer 3rd Edition

ü        Thinking in C++

本文地址:http://com.8s8s.com/it/it26570.htm