为什么调用了不合适的重载函数
Why is the unsuitable overloaded function is called?
为什么下面的代码总是打印"type is double"?(我在StackOverflow中看到过这个代码)
#include <iostream>
void show_type(...) {
std::cout << "type is not doublen";
}
void show_type(double value) {
std::cout << "type is doublen";
}
int main() {
int x = 10;
double y = 10.3;
show_type(x);
show_type(10);
show_type(10.3);
show_type(y);
return 0;
}
http://en.cppreference.com/w/cpp/language/overload_resolution说:
标准转换序列总是比用户定义的转换序列或省略号转换序列更好。
void show_type(double value) {
std::cout << "type is doublen";
}
如果你在上面评论行,那么输出将是
type is not double type is not double type is not double type is not double
这意味着编译总是更喜欢CCD_ 1而不是CCD_。
在您的情况下,如果您想调用方法void show_type(…),请在调用此方法show_type(firstParameter,secondParameter)
时传递两个或多个参数
#include <iostream>
void show_type(...) {
std::cout << "type is not doublen";
}
void show_type(double value) {
std::cout << "type is doublen";
}
int main() {
int x = 10;
double y = 10.3;
show_type(x);
show_type(10);
show_type(10.3);
show_type(y);
show_type(4.0,5); //will called this method show-type(...)
return 0;
}
现在以上线路的输出将是
type is double type is double type is double type is double type is not double //notice the output here
有关var args 的更多信息
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?