先說結論
- 在語義層面,潛在的二義性,C++編譯器不會報錯。
- 隻有産生了實際的二義性,C++編譯器才報錯。
編譯器:
- VC6.0
- gcc version 4.8.4
看一段代碼:
using namespace std;
void testFunc()
{
cout<<"testFunc void"<<endl;
return;
}
void testFunc(int inputVar = 0)
{
cout<<"testFunc with default input"<<endl;
return;
}
int main()
{
testFunc();
cout<<"here is main func"<<endl;
return 0;
}
會報錯:
但是,
- 如果把main函數裡面的testFunc();删除,則不會報錯。
- 因為此時并沒有實際的二義性,隻是存在潛在的二義性。
擴充:
- 如果一個函數從未被調用,裡面有無法連結的符号。Link依然會報錯,原是以處不調用,别的地方可能會用到。