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。为什么不抛出异常?构造函数是否依赖于参数的数量或其类型?我在哪里可以阅读有关此内容的信息?
因为这种隐式转换(从double到int)是允许的。
浮点积分转换
- 浮点类型的纯右值可以转换为任何整数类型的纯右值。小数部分被截断,即小数部分被丢弃。如果该值不能适合目标类型,则行为未定义(即使目标类型是无符号的,模运算也不适用)。
如果你不想这样的构造发生,你可以添加一个构造函数,double并将其标记为delete. 例如
class A {
public:
A(double) = delete;
A(int y) { cout << y; }
};
Run Code Online (Sandbox Code Playgroud)
顺便说一句:1.5是一个double,不是一个float。