“Explicit” preventing automatic type conversion?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What does the explicit keyword in C++ mean?
我不理解以下内容。如果我有:
1 2 3 | class Stack{ explicit Stack(int size); } |
如果没有关键字
1 2 | Stack s; s = 40; |
如果没有明确的规定,为什么允许我这样做?这是因为这是堆栈分配(没有构造函数),C++允许任何分配给变量,除非使用EDCOX1×0?
这条线
1 | s = 40; |
等于
1 | s.operator = (40); |
它试图匹配默认的
1 | s.operator = (Stack(40)); |
如果构造函数是
嘿,很简单。显式关键字只会阻止编译器自动将任何数据类型转换为用户定义的数据类型。它通常与具有单个参数的构造函数一起使用。所以在这种情况下,你只是在阻止编译器进行显式转换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include iostream using namespace std; class A { private: int x; public: A(int a):x(a) {} } int main() { A b=10; // this syntax can work and it will automatically add this 10 inside the // constructor return 0; } but here class A { private: int x; public: explicit A(int a):x(a) {} } int main() { A b=10; // this syntax will not work here and a syntax error return 0; } |