[C++标准程序库 2.2.6]

通过关键字explicit的作用,我们可以禁止“单参数构造函数(single argument constructor)”被用于自动型别转换。

class Stack {
  explicit Stack(int size); // Create stack with initial size
};
...
Stack s;
s = 40;     // Oops, creates a new Stack for 40 elements and assigns it to s

如果没有explicit,上面那个构造函数有能力将一个int自动转型为Stack。“自动型别转换”动作会把40转换为40个元素的Stack,并指派给s。

如果我们将构造函数声明为explicit,上述赋值操作就会导致编译错误

 

注意: explicit同样也能拒绝“以复制语法进行带有转型操作的初始化”。

Stack s1(40);  // OK

Stack s2 = 40; // ERROR

这是因为:

X x; 

Y y(x);  // explicit conversion

X x;

Y y = x;  // implicit conversion

存在一个小差异。

前者透过显式转换,根据型别X产生一个型别Y的新对象。后者通过隐式转换,产生一个型别Y的新对象。

 

相关文章:

  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
  • 2021-07-18
猜你喜欢
  • 2021-08-15
  • 2021-11-05
  • 2021-07-14
  • 2021-12-17
  • 2021-06-05
  • 2022-02-02
  • 2021-08-10
相关资源
相似解决方案