“明确”阻止自动类型转换?


“Explicit” preventing automatic type conversion?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What does the explicit keyword in C++ mean?

我不理解以下内容。如果我有:

1
2
3
class Stack{
    explicit Stack(int size);
}

如果没有关键字explicit,我可以这样做:

1
2
Stack s;
s = 40;

如果没有明确的规定,为什么允许我这样做?这是因为这是堆栈分配(没有构造函数),C++允许任何分配给变量,除非使用EDCOX1×0?


这条线

1
s = 40;

等于

1
s.operator = (40);

它试图匹配默认的operator = (const Stack &)。如果Stack构造函数不是显式的,则尝试并成功执行以下转换:

1
s.operator = (Stack(40));

如果构造函数是explicit,则不尝试此转换,重载解析失败。


嘿,很简单。显式关键字只会阻止编译器自动将任何数据类型转换为用户定义的数据类型。它通常与具有单个参数的构造函数一起使用。所以在这种情况下,你只是在阻止编译器进行显式转换。

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;
}