【发布时间】:2016-03-11 19:46:27
【问题描述】:
谁能解释为什么下面的代码可以编译?我希望它会在double 常量3.3 无法转换为int 时出现错误,因为我将构造函数声明为explicit。
class A
{
public:
int n;
explicit A(int _n);
};
A::A(int _n)
{
n = _n;
}
int main()
{
A a(3.3); // <== I expect this line to get an error.
return 0;
}
【问题讨论】:
-
我想你可能误解了explicit 关键字的作用。
-
不,这行会给你错误
A b = 24; -
这就是统一(即大括号括起来)初始化的用途:
A a{3.3};会失败,因为它是缩小转换(双精度到整数)。但是A a(3.3);不允许,因为允许缩小转换。