簡體   English   中英

匿名命名空間中的 C++ 類型別名

[英]C++ type aliases in anonymous namespace

我理解匿名名稱空間的一般用途是包含應該只對當前源文件(即非頭文件)可見的代碼。 但是,我無法找到有關以下情況發生的任何信息:

// In foo.cpp

#include <vector>

// Choice #1
template <typename T>
using Vec1 = std::vector<T>;

// Choice #2
namespace {

template <typename T>
using Vec2 = std::vector<T>;

}

Vec1Vec2有什么不同嗎? 由於我想不出在 header 文件中使用“extern”類型別名來引用Vec1的方法,因此我不確定這里的匿名命名空間是否有任何作用。

匿名名稱空間主要影響鏈接 單獨的類型別名沒有鏈接,因此在您的情況下,兩者是相同的。

也就是說,可能包含的一些 header 也定義了一個具有相同名稱的模板類型別名,但它的別名是不同的類型。 那么就有區別了; 如果您將所有實現細節函數也保留在與別名相同的匿名命名空間中,則不會出現錯誤,而對於您編寫的非命名空間別名,程序將不正確。


我們通常使用匿名命名空間,這樣我們就不會意外地提供在另一個 header 中聲明的 function 的實現。 它們也可以用來確保我們沒有為在別處聲明的extern變量定義存儲。

使用類型別名,不存在泄漏實現的風險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM