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

ako*_*hko 1 c++ implicit-conversion

让我们假设我有这个代码:

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

int main() {
    A a(1.5);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

即使 1.5 是float,这段代码也能工作并返回 1。float被隐式转换为int。为什么不抛出异常?构造函数是否依赖于参数的数量或其类型?我在哪里可以阅读有关此内容的信息?

son*_*yao 5

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

浮点积分转换

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

如果你不想这样的构造发生,你可以添加一个构造函数,double并将其标记为delete. 例如

class A {
public:
    A(double) = delete;
    A(int y) { cout << y; }
};
Run Code Online (Sandbox Code Playgroud)

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