為什麼C 引入作用域解析運算子
與Java 相比,C 提供了獨特的作用域解析運算子(:: ),而不是依賴僅在點(.) 運算子上。儘管 Java 在沒有單獨的運算子的情況下取得了成功,但由於獨特的語言功能,C 仍然需要添加此功能:能夠對成員變數和衍生類別類型使用相同的識別碼。
在考慮程式碼時,這種差異變得顯而易見如下例所示:
struct foo { int blah; }; struct thingy { int data; }; struct bar : public foo { thingy foo; };
在這種情況下,bar 結構中的成員變數foo 和衍生類別foo 共享相同的名稱。為了解決這種歧義,使用範圍解析運算子 ::。
當編譯器遇到 . 時,它假設左側運算元是一個物件。相反,:: 表示類型名稱、命名空間或全域命名空間。這種差異使編譯器能夠解釋如下程式碼:
test.foo.data = 5; test.foo::blah = 10;
在第一個語句中,test.foo.data 被識別為存取物件 test.foo 的資料成員。在第二個語句中,test.foo::blah 表示存取衍生類別 foo 的 blah 成員。
因此,C 中的作用域解析運算子充當精確工具,用於解決由於允許相同的值而產生的歧義。成員變數和衍生類別類型的識別碼。
以上是為什麼 C 使用作用域解析運算子 (::) 而 Java 不使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!