为什么float参数适合int函数参数?

时间:2015-06-20 18:57:48

标签: c++ constructor type-conversion

请看这段代码:

#include <iostream>
class A {
  public:
    int my;
    A(int a=0) : my(a) { }
};

int main() {
  A x = 7; // 1
  A y = 6.7; // 2
  std::cout << x.my << " " << y.my << "\n";
}

虽然没有A(double a);构造函数,但它实际上是编译的。 什么时候允许编译器将一个参数类型转换为另一个参数类型以调用相应的构造函数?

1 个答案:

答案 0 :(得分:3)

cppreference有a list次标准转化。您感兴趣的是浮动 - 积分转换部分,该部分也可以在N4140 4.9 / 1

中找到
  

浮点类型的prvalue可以转换为任何整数类型的prvalue。小数部分被截断,即小数部分被丢弃。

通过标准转换查找A(int)可调用,编译器插入必要的步骤以使代码工作。它允许int x = 1.1编译

的规则相同

如果此行为不合适,您可以使用=delete

禁止此行为
class A {
  public:
    //...
    A(int a);
    A(double) =delete;
};