可能重复:
C++ 中的显式关键字是什么意思?
我不明白以下内容。如果我有:
class Stack{
explicit Stack(int size);
}
如果没有关键字explicit
,我将被允许这样做:
Stack s;
s = 40;
如果没有提供明确的内容,为什么我会被允许执行上述操作?是因为这是堆栈分配(没有构造函数)并且 C++ 允许将任何东西分配给变量,除非explicit
使用?
可能重复:
C++ 中的显式关键字是什么意思?
我不明白以下内容。如果我有:
class Stack{
explicit Stack(int size);
}
如果没有关键字explicit
,我将被允许这样做:
Stack s;
s = 40;
如果没有提供明确的内容,为什么我会被允许执行上述操作?是因为这是堆栈分配(没有构造函数)并且 C++ 允许将任何东西分配给变量,除非explicit
使用?
这条线
s = 40;
相当于
s.operator = (40);
哪个尝试匹配默认值operator = (const Stack &)
。如果Stack
构造函数不是显式的,则尝试以下转换并成功:
s.operator = (Stack(40));
如果构造函数是explicit
,则不尝试此转换并且重载决议失败。
嘿它很简单。显式关键字仅阻止编译器将任何数据类型自动转换为用户定义的类型。它通常与具有单个参数的构造函数一起使用。所以在这种情况下,你只是阻止编译器进行显式转换
#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;
}