|
|
|
|
explicit用法,防止对象隐式被转换。 例子一:隐式转换
class C
{ public: C ( int j ); int i; }; C::C (int j) { i = j; } int main() { C c(0); c = 5; //5被隐式转换 }
c = 5 相当于
C temp(5);// 实例化一个临时对象, c = temp; // 用 = 赋值 temp.C::~C(); // temp 的析构函数被激活
如果类内的成员是一个指针,这种隐式转换是很危险的。为了防止这种隐式转换,我们把 C ( int j ); 改写为explicit C ( int j );即可。
这下编译的时候,会不允许这种隐式的转换,出现如下提示:
Compiling ![]() test.cpp D:\DATUM\DATUM\PROJECT\Test_muable\test.cpp(14) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conversion) Error executing cl.exe. Test_muable.exe - 1 error(s), 0 warning(s) |


