2016-11-22 24 views
3

因此,我知道靜態函數是文件本地的函數。因此,他們不能從其他文件訪問。這是否也適用於課程?我已經讀了很多關於static class如何不聲明類包含純靜態成員和方法(這是顯而易見的)的爭議,但是找不到任何提及該類是否可以在本地訪問的類文件範圍,更符合邏輯。C++如何聲明一個類作爲本地文件

如果沒有,那麼使用匿名命名空間,我聽說也可以用來聲明文件本地函數?

+0

您正在尋找的概念被稱爲* linkage *。 –

+2

「一噸爭議」?我從來沒有聽說過這樣的爭議。事實上,情況非常清楚明確。 –

+0

定義翻譯單元本地類的方法是將其粘貼到未命名的名稱空間中。 –

回答

8

您可以定義具名命名空間的一類,例如

namespace 
{ 
    struct A {}; 
} 

在這種情況下,類名稱將有內部鏈接。也就是說,只有在定義它的編譯單元中才可見,並且包含該定義的所有編譯單元都將具有其自己的類定義。

作爲用於存儲類說明static然後(7.1.1存儲類別說明符)

5靜態說明符可以只應用到的變量的名稱和 功能和匿名聯合

1

這是否也適用於課程?

沒有這樣的類的靜態關鍵字。


作爲一種替代「匿名命名空間」,你可以聲明一個類(美孚),其定義(實現)完全處於一個CPP文件。它可以使用這個類唯一的代碼是聲明下面的代碼...

x.cpp文件:

// Foo declared 
class Foo 
{ 
public: 
    //...ctor 
    //...dtor 
    // etc.  
} 

// ... Foo defined (implemented) 
Foo::etc() { ... } 


// implementation of X - only X has access to Foo. 

X.cpp結束。

And File X.hpp does not reference Foo. 

如果隨後發現名稱衝突(即鏈接報告重複的符號),你唯一的選擇就是改變一個或另一個名稱。


有很多關於匿名命名空間的SO。我很小心我把什麼東西放進一個,並且同意他們可以防止名稱衝突。

我已經使用了這兩種技術。

相關問題