拷贝构造函数的形参为何应该是const Type& src
2011-03-05 21:53
274 查看
class A { private: int value; public: A(int value){ this->value = value; } A(A src){ this->value = src.value; } }; int main(int argc, char* argv[]) { A a = 0; A b = a; return 0; }
如果像上面的程序那样,拷贝构造函数是传值,那么在执行该函数的时候要copy一份对象,就要调用copy构造函数,造成了死循环调用
为了避免,C++不允许拷贝构造函数所传值。
另外拷贝构造函数对于被拷贝的对象来说,是不会修改它的,为了避免修改,所以采用了const 引用
因此拷贝构造函数的形参形式一般是
const Type& src
相关文章推荐
- C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const std::basic
- <script type="text/javascript" src="">
- C++ Primer 学习笔记与思考_4 ---getline&&size_type&&const_iterator混搭
- 不能将this指针从“const type" 转换为"type &"
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容 (vs2012)
- EVC const type_info::`vftable'
- Pointer to non-const type 'PLTexture*'with no explicit ownership错误,解决办法
- vs2013 IntelliSense: "const char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容
- C++之invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
- 常引用(const type&)的特性及引用的本质
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容 (vs2010)
- 解决 sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers
- const type&的使用注意
- extern "C" ,const type& fun() const
- C++引用报错:invalid initialization of non-const reference of type ‘std::string&’ from an rvalue of type
- C++类型转换运算符之const_cast<newtype>(expression)
- error C2440: “初始化”: 无法从“const char *”转换为“ATL::CStringT<BaseType,StringTraits>”
- IntelliSense: "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容 (vs2010)
- "const char *" 类型的实参与 "LPCTSTR" 类型的形参不兼容