2017-01-13 27 views
-4

命名空間和類是C++中的兩個不同的概念。名稱空間僅用於防止名稱衝突,而類是用戶定義的類型。爲什麼命名空間和類在C++中具有相同的語法?

爲什麼它們使用相同的::語法?

例如:

namespace::function(); 
class::function(); 
+2

我建議你拿起一本關於C++的好書(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)並閱讀涵蓋範圍的章節分辨率運算符('::')。 –

+0

這麼多的反對票嗎?我認爲這是一個有趣的問題,並未在stackoverflow上提出。 – iianfumenchu

+0

的確,這裏的降價似乎過於苛刻。 –

回答

6

兩種命名空間和類形成scopes作用域是一個與名稱空間和類相當一致的概念:有類作用域,C++中有名稱空間作用域(以及其他類型的作用域)。而且由於::是一個範圍解析運算符,它在命名空間和類以句法相似的方式使用時沒有什麼不尋常之處。

2

因爲類,就像名稱空間引入了一個(通常命名的)作用域。範圍解析運算符與類和名稱空間的工作方式相同。增加更多的操作員來做同樣的事情是沒有好處的。

如果類沒有引入作用域,就不會有麻煩:

struct buffer { 
    int size, *data; 
}; 

struct list { 
    node* head; 
    int size; // oops, name conflict! 
}; 

顯然,類必須引入作用域爲會員。

相關問題