假设我有以下代码:
class A {
public:
A(int y) { cout << y; }
};
int main() {
A a(1.5);
return 0;
}
即使1.5是a float
,该代码也可以工作并返回1。float
隐式转换为int
。为什么没有抛出异常?构造函数是否取决于参数的数量或其类型?我在哪里可以读到?
因为这样的隐式转换(从double
到int
)是允许的。
浮点积分转换
- 浮点类型的prvalue可以转换为任何整数类型的prvalue。小数部分将被截断,即小数部分将被丢弃。如果该值不能适合目标类型,则行为是不确定的(即使目标类型是无符号的,模运算也不适用)。
如果您不希望发生这种构造,则可以添加一个带有的构造函数double
并将其标记为delete
。例如
class A {
public:
A(double) = delete;
A(int y) { cout << y; }
};
顺便说一句:1.5
是double
,不是float
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句