其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
&操作符浅析

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

&操作符浅析

& 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++




相关文章

相关软件