码迷,mamicode.com
首页 > 其他好文 > 详细

复制构造函数和赋值操作符的注意点.

时间:2014-08-10 15:18:30      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   ar   问题   div   代码   

记得在复制构造函数和赋值操作符的参数类型上加上const.正确的复制构造函数应该是X::X(const X&)这种,而不是X::X(X&)这种,这里有两个原因.

第一:绑定一个非const引用到一个临时对象是非法的.使用X::X(X&)作为复制构造函数不会允许复制任何特殊表达式的结果.为什么呢.?因为引用的初始化规则规定了不能将临时变量作为引用的初始化值。

而常量引用除外.

此外:防止修改引用的值(这个大家都知道).

 

同样的道理: X::operator=(const X&)是赋值操作符的正确形式.

举例一:good方法中的参数设置成const的.那么下面的代码能正确执行.

 1 class A
 2 {
 3 public:
 4     A(){};
 5 };
 6 
 7 void good(const A& c){}
 8 
 9 int main(int argc,char* argv[])
10 {
11     A a;
12     good(a);
13     const A b;
14     good(b);
15     return 0;
16 }

举例二:good方法中的参数不设置成const的.那么下面的代码不能正确执行.

 1 class A
 2 {
 3 public:
 4     A(){};
 5 };
 6 
 7 void good(A& c){}
 8 
 9 int main(int argc,char* argv[])
10 {
11     A a;
12     good(a);
13     const A b;
14     good(b);//此处有问题
15     return 0;
16 }

 

复制构造函数和赋值操作符的注意点.,布布扣,bubuko.com

复制构造函数和赋值操作符的注意点.

标签:style   blog   color   使用   ar   问题   div   代码   

原文地址:http://www.cnblogs.com/crazycodehzp/p/3902692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!