程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++函數二義性問題,我怎麼感覺編譯器有偷懶嫌疑!!!,編譯器嫌疑

C++函數二義性問題,我怎麼感覺編譯器有偷懶嫌疑!!!,編譯器嫌疑

編輯:C++入門知識

C++函數二義性問題,我怎麼感覺編譯器有偷懶嫌疑!!!,編譯器嫌疑


瞎扯一段,講得不一定對。純屬學習!

struct BB
{
void a(){
cout << "bb's a()\n";
}
};

struct B1 : public BB
{
};

struct B2 : public BB
{
};

struct CC : virtual public B1,public B2
{
CC()
{

 a(); // 調用a函數,編譯不過,需這樣調B1::a();B2::a();BB::a();

}
};

在上述代碼中,struct CC的構造裡調用a()函數會產生所謂的二義性。好吧,事實就是這樣。在此瞎扯一段,在這個實例裡,如果編譯器足夠聰明,這裡本不該產生二義性才對。因為這個函數並沒有什麼“真正的繼承”問題,B1和B2裡也沒有覆蓋定義a()函數。如果覆蓋了,調用時要加限定符,不然會產生二義性,這我還能理解。但僅是這個例子中,假設編譯器允許它編譯成功,真的會有二義性嗎?會產生調用錯誤嗎?我覺得沒有。所以我瞎講一下,編譯器有偷懶嫌疑。現在的編程都是朝著越來越精簡的方向走了,沒有用的語法限制只會帶來麻煩。好吧,以前幾乎不用多繼承,我一直憑直覺以為這種情況下直接調a()不會有問題,現在漲下知識。以上就是粗略見解,講得不好不對請原諒!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved