好久没有用C++了,重新温习一下 C++primer plus 5
记录一下忘记的知识点:
类的自动转换和强制类型转换:
class Test{private:
int a;
double b;
public:
Test(int a);
Test(int a,double b);
};
Test myTest;
myTest = 20; //正确,这一过程称为隐式调用Test(int a);
将构造函数用作自动类型转换函数似乎是不错的特性。
当程序员具有丰富的C++经验时,将发现这种自动特性并非总是合乎需要的。因为导致意外的类型转换。
类些C++添加了关键字explicit,用于关闭这种自动的特性。
也就是说构造函数可以这样声明:
explicit Test(int a);
这将关闭了上面示例中的隐式转换,但仍然可用显式转换,即显式强制类型转换:
Test mytest;
mytest = 20; //错误
mytest = Test(20); //正确
mytest = (Test)20; //正确,这是老版本