Effective C++ Item05 Note

来源:互联网 发布:哥布林升级数据 编辑:程序博客网 时间:2024/06/11 20:16
//Effective C++ Item05#include<iostream>#include<cstring>using namespace std;//声明一个empty class时,编译器会为它声明一个default构造函数,copy构造函数,一个copy assignment操作符和一个析构函数,所有这些函数都是public inline//编译器产出的析构函数是non-virtual的,除非base class自身声明有virtual构造函数class Empty{};//在class含有const或reference成员变量时编译器将不会为它声明copy assignment操作符//如果base class将copy assignment操作符声明为private,编译器也将拒绝为其derived class声明一个copy assignment操作符template<typename T>class NamedObject{public:NamedObject(std::string& name, const T& value) :nameValue(name),objectValue(value){//nameValue = name;//必须在member initialization list中初始化reference变量//objectValue = value;//const成员变量不能够赋值};private:std::string& nameValue;const T objectValue;};int main(){std::string newDog("Persephone");std::string oldDog("Satch");NamedObject<int> p(newDog, 2);NamedObject<int> s(oldDog, 36);//p = s;//C++不允许让reference改指向不同对象,编译会出现operator=不可用的错误}

0 0