C++ 为什么浮点参数适合int函数参数?

C++ 为什么浮点参数适合int函数参数?,c++,constructor,type-conversion,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"; } #包括 甲级{ 公众: intmy; A(inta=0):my(A)

请看下面的代码:

#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";
}
#包括
甲级{
公众:
intmy;
A(inta=0):my(A){
};
int main(){
A x=7;//1
A y=6.7;//2
std::coutcppreference有许多标准转换。您感兴趣的是浮点-整数转换部分,也可以在4.9/1中找到

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

如果发现
A(int)
可以通过标准转换调用,编译器将插入必要的步骤以使代码正常工作。这与允许
intx=1.1
编译的规则相同

如果这种行为不受欢迎,您可以使用
=delete

class A {
  public:
    //...
    A(int a);
    A(double) =delete;
};    

每次允许编译器转换时[当隐式转换是可能的且没有更好的方法时]。列出了标准转换。这里特别有趣的是浮点整数转换。此外,请查找构造之间的差异,
A x(7)
和赋值,
x=7;
删除
=delete
的效果是什么?
A(int)
之所以被调用,是因为它是原始代码中的最佳匹配项。如果存在
A(double)
它就会调用它。
=delete
表示您不希望该函数可调用