天天看點

潛在二義性

先說結論

  • 在語義層面,潛在的二義性,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依然會報錯,原是以處不調用,别的地方可能會用到。

繼續閱讀