调用重载函数时将int型转换为double型
Conversion of int to double when calling an overloaded function
void essai (int, double); // essai I
void essai (double, int); // essai II
int n, p; double z; char c;
essai(n,z); // calling essai I
essai(c,z); // calling essai I, after the conversion of c in int
essai(n,p); // compilation error
为什么essai(n,p)
在这里产生编译错误?是因为不能从整型转换为双精度吗?
编译器查看essai
的两个重载,并决定采用哪个重载,以及执行哪些转换来进行调用:
- 在
essai(n,z)
的情况下,重载#1获胜,因为它可以在没有转换的情况下调用,而重载#2的两个转换 - 在
essai(c,z)
的情况下,重载#1胜出,因为它可以通过一次将char
转换为int
来调用,而重载#2 则需要两次转换。 - 在
essai(n,p)
的情况下,两个重载都需要相同数量的转换(2)。由于没有明确的赢家,编译器认为调用有二义性,并发出错误。
均
void essai (int, double);
void essai (double, int);
当您调用essai(n,p);
时,是有效的重载,因为需要转换其中一个int
,以便它可以转换其中任何一个。因为你有两个相等的重载,编译器放弃了,并且应该发出一个歧义编译错误。
编译器不知道该将int
的哪些数据转换为double
您应该显式地将其转换为调用essai I:essai(n,(double)p);
或调用essai II:essai((double)n,p);
相关文章:
- C++在数学计算中将double转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何正确将"strings"转换为"double"?
- Zedboard zynq-7000 Opencl 浮点数从类型 'double*' 强制转换为类型 'double' 无效
- "std::function<double(double)>"到"double (*)(double)"之间的转换
- C++ 模板函数无法将"std:string"转换为"double"作为回报
- 缩小从double到float的转换
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 将 mwArray 转换为 std::vector<double>
- 使用词法强制转换在'string to double'中设置双精度变量的精度
- 如何将 Java double[][] 转换为 C++ <vector<vector>> JNI?
- 从 std::vector<double> 到 Python 列表的转换失败(提升 python)
- 转换 cv::mat 转换为 std::矢量<double>并发症
- 将双数组转换为标准::复杂<double>
- 将 std::vector<boost::optional<double>> 转换为 std::vector<double>
- 将 double* 转换为 std::vector<double> (C++)
- 无法将复数<double>转换为双精度
- 将 int 转换为双精度以执行 std::complex <double>的"*"操作
- "double(*)(string, double, double)"尝试传递函数C++时"double"转换错误