“显式”阻止自动类型转换?
可能重复:
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;
}
链接地址: http://www.djcxy.com/p/24557.html
上一篇: "Explicit" preventing automatic type conversion?
下一篇: c++