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
表示您不希望该函数可调用