[英]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>;
}
Vec1
和Vec2
有什么不同嗎? 由於我想不出在 header 文件中使用“extern”類型別名來引用Vec1
的方法,因此我不確定這里的匿名命名空間是否有任何作用。
匿名名稱空間主要影響鏈接。 單獨的類型別名沒有鏈接,因此在您的情況下,兩者是相同的。
也就是說,可能包含的一些 header 也定義了一個具有相同名稱的模板類型別名,但它的別名是不同的類型。 那么就有區別了; 如果您將所有實現細節函數也保留在與別名相同的匿名命名空間中,則不會出現錯誤,而對於您編寫的非命名空間別名,程序將不正確。
我們通常使用匿名命名空間,這樣我們就不會意外地提供在另一個 header 中聲明的 function 的實現。 它們也可以用來確保我們沒有為在別處聲明的extern
變量定義存儲。
使用類型別名,不存在泄漏實現的風險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.