复制构造函数和赋值操作符的注意点.
2014-08-10 12:54
239 查看
记得在复制构造函数和赋值操作符的参数类型上加上const.正确的复制构造函数应该是X::X(const X&)这种,而不是X::X(X&)这种,这里有两个原因.
第一:绑定一个非const引用到一个临时对象是非法的.使用X::X(X&)作为复制构造函数不会允许复制任何特殊表达式的结果.为什么呢.?因为引用的初始化规则规定了不能将临时变量作为引用的初始化值。
而常量引用除外.
此外:防止修改引用的值(这个大家都知道).
同样的道理: X::operator=(const X&)是赋值操作符的正确形式.
举例一:good方法中的参数设置成const的.那么下面的代码能正确执行.
举例二:good方法中的参数不设置成const的.那么下面的代码不能正确执行.
第一:绑定一个非const引用到一个临时对象是非法的.使用X::X(X&)作为复制构造函数不会允许复制任何特殊表达式的结果.为什么呢.?因为引用的初始化规则规定了不能将临时变量作为引用的初始化值。
而常量引用除外.
此外:防止修改引用的值(这个大家都知道).
同样的道理: X::operator=(const X&)是赋值操作符的正确形式.
举例一:good方法中的参数设置成const的.那么下面的代码能正确执行.
class A { public: A(){}; }; void good(const A& c){} int main(int argc,char* argv[]) { A a; good(a); const A b; good(b); return 0; }
举例二:good方法中的参数不设置成const的.那么下面的代码不能正确执行.
class A { public: A(){}; }; void good(A& c){} int main(int argc,char* argv[]) { A a; good(a); const A b; good(b);//此处有问题 return 0; }
相关文章推荐
- 一个实例介绍C++复制控制(有一个C++11新特性要注意)——复制构造函数、赋值操作符、析构函数
- string类构造、拷贝构造、赋值、操作符函数实现及注意事项
- 复制构造函数 赋值操作符
- 复制构造函数与赋值操作符之间的区别
- 复制构造函数和赋值操作符
- 复制构造函数、析构函数、赋值操作符缺少其一的后果
- C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
- 复制构造函数或赋值操作符
- 复制构造函数、赋值操作符与隐式类类型转换
- C++技术感想 -- 禁止类的复制构造函数和赋值操作符的使用
- C++ 复制构造函数和赋值操作符
- 复制构造函数与赋值操作符的重载
- 复制构造函数和赋值操作符
- 赋值操作符与复制构造函数
- 复制构造函数,赋值操作符、关系操作符,const函数
- 重温C++ primer 之复制控制(复制构造函数,赋值操作符,析构函数)
- [C++]复制构造函数、赋值操作符与隐式类类型转换
- 13.1——复制构造函数,赋值操作符,析构函数
- C++学习笔记49——继承中的复制构造函数与赋值操作符
- 实现赋值操作符要注意的问题