匹配原则
- 严格匹配
- 隐士转换匹配:当精准匹配不到时,会退而求其次
- 无法匹配(找不到/二义性)
#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个,编译器就懵逼了,臣妾做不到啊😓 不知道怎么转,删掉一个即可。