1. 如果没有声明任何构造函数,编译器会为你声明一个default构造函数
2. 惟有default构造函数被需要,才会被编译器创建出来
class Empty { public: Empty() {}//1. 默认构造 ~Empty() {} //2. 析构函数 Empty(const Empty& rhs) {} //3. copy构造 Empty& operator=(const Empty& rhs) {} //4. copy赋值 };
1. 声明了构造函数,编译器于是不再为它创建default构造函数
2. 内置类型默认拷贝构造,每个成员变量对应初始化
3. 内置类型默认拷贝赋值基本于默认拷贝构造一致
4. 对于成员变量为引用类型或const类型,拒绝生成默认拷贝构造和赋值
template<typename T> class NameObject { public: NameObject(): nameValue(),objectValue() {} NameObject(const std::string& name, const T& value) : nameValue(name), objectValue(value) {} const std::string& NameValue()const { return nameValue; } private: //std::string& nameValue; //拒绝生成 //const std::string nameValue; //拒绝生成 std::string nameValue; T objectValue; }; void Test00() { NameObject<int> no1("Smallest Prime Number", 2); NameObject<int> no2(no1); //调用默认拷贝构造 std::cout << no2.NameValue() << std::endl; NameObject<int> no3; no3 = no1; //调用默认拷贝赋值 std::cout << no3.NameValue() << std::endl; }
标签:std,调用,const,05,nameValue,c++,默认,Empty,构造函数 From: https://www.cnblogs.com/BoYuCG/p/18402227