为什么调用不合适的重载函数?

时间:2015-11-07 15:37:34

标签: c++ overloading

为什么以下代码始终打印“type is double”? (我在StackOverflow中看到过这段代码)

#include <iostream>


void show_type(...) {
    std::cout << "type is not double\n";
}

void show_type(double value) { 
    std::cout << "type is double\n"; 
}

int main() { 
    int x = 10;
    double y = 10.3;

    show_type(x);
    show_type(10);
    show_type(10.3);
    show_type(y);


    return 0;
}

2 个答案:

答案 0 :(得分:8)

http://en.cppreference.com/w/cpp/language/overload_resolution说:

  

标准转换序列总是更好而不是用户定义的转换序列或省略号转换序列。

答案 1 :(得分:1)

DataTrigger

如果你在上面评论,那么输出将是

   void show_type(double value) { 
        std::cout << "type is double\n"; 
    }

这意味着编译总是更喜欢type is not double type is not double type is not double type is not double 而不是void show_type(double value)

在你的情况下如果你想调用方法void show_type(...)在你调用这个方法时传递两个或多个参数void show_type(...)

show_type(firstParameter,secondParameter)

现在上面一行的输出将是

#include <iostream>


void show_type(...) {
    std::cout << "type is not double\n";
}

void show_type(double value) { 
    std::cout << "type is double\n"; 
}

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;
}

more info on var-args