匹配原则

  • 严格匹配
  • 隐士转换匹配:当精准匹配不到时,会退而求其次
  • 无法匹配(找不到/二义性)


#include <iostream>
void print(int i){
    std::cout<<"print(int i)"<<i<<std::endl;
}
void print(char c){
    std::cout<<"print(char c)"<<c<<std::endl;
}
void print(float f){
    std::cout<<"print(float f)"<<f<<std::endl;
}

int main(int argc, const char * argv[]) {
    print(1);
    print('x');
    print(3.7f);
    return 0;
}
print(int i)1
print(char c)x
print(float f)3.7

我们再把最佳匹配关掉,再来测试一下

xcode中直接报错了

再用g++,clang++编译测试:

➜  重载原则 g++ main.cpp
main.cpp:21:5: error: call to 'print' is ambiguous
    print(80);
    ^~~~~
main.cpp:13:6: note: candidate function
void print(char c){
     ^
main.cpp:16:6: note: candidate function
void print(float f){
     ^
1 error generated.
➜  重载原则 clang++ main.cpp
main.cpp:21:5: error: call to 'print' is ambiguous
    print(80);
    ^~~~~
main.cpp:13:6: note: candidate function
void print(char c){
     ^
main.cpp:16:6: note: candidate function
void print(float f){
     ^
1 error generated.
➜  重载原则 clang++ -std=c++11 main.cpp
main.cpp:21:5: error: call to 'print' is ambiguous
    print(80);
    ^~~~~
main.cpp:13:6: note: candidate function
void print(char c){
     ^
main.cpp:16:6: note: candidate function
void print(float f){
     ^
1 error generated.

都报错:二义性问题,什么是二义性问题呢?一下出现了多个同名函数,这里是2个,编译器就懵逼了,臣妾做不到啊😓 不知道怎么转,删掉一个即可。

results matching ""

    No results matching ""