C ++构造函数隐式类型转换

阿科列奇科

假设我有以下代码:

class A {
public:
    A(int y) { cout << y; }
};

int main() {
    A a(1.5);

    return 0;
}

即使1.5是a float,该代码也可以工作并返回1。float隐式转换为int为什么没有抛出异常?构造函数是否取决于参数的数量或其类型?我在哪里可以读到?

songyuanyao

因为这样的隐式转换(从doubleint)是允许的。

浮点积分转换

  • 浮点类型的prvalue可以转换为任何整数类型的prvalue。小数部分将被截断,即小数部分将被丢弃。如果该值不能适合目标类型,则行为是不确定的(即使目标类型是无符号的,模运算也不适用)。

如果您不希望发生这种构造,则可以添加一个带有的构造函数double并将其标记为delete例如

class A {
public:
    A(double) = delete;
    A(int y) { cout << y; }
};

顺便说一句:1.5double,不是float

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章