這是considered bad practice僱用using namespace
在C + +頭。它是同樣一個壞主意,在頭使用namespace aliasing,每個實現文件應當聲明它希望使用別名?應該在頭文件中使用C++名稱空間別名?
由於標題是您傾向於使用完全指定名稱的地方(因爲我們不在名稱頭中使用名稱空間),所以別名會很有用,但當#included
時,它們仍然會傳播您的源代碼。
這裏的最佳做法是什麼?什麼是空間別名的範圍是什麼?
這是considered bad practice僱用using namespace
在C + +頭。它是同樣一個壞主意,在頭使用namespace aliasing,每個實現文件應當聲明它希望使用別名?應該在頭文件中使用C++名稱空間別名?
由於標題是您傾向於使用完全指定名稱的地方(因爲我們不在名稱頭中使用名稱空間),所以別名會很有用,但當#included
時,它們仍然會傳播您的源代碼。
這裏的最佳做法是什麼?什麼是空間別名的範圍是什麼?
如果你把一個命名空間別名到你的頭,這個別名將成爲你的(公共)API的一部分。
有時,這種技術被用來做ABI兼容的版本(或者至少使破損可見)是這樣的:
namespace lib_v1 { ... }
namespace lib_v2 { ... }
namespace lib = lib_v2;
或更常見:
namespace lib {
namespace v1 {}
namespace v2 {}
using v2;
}
在另一方面,如果你做這只是爲了節省一些打字它可能不是一個好主意。 (仍然比使用using
指令更好)
我這樣做,與未命名空間是這樣的:
#include <whatyouneed>
...
namespace {
typedef ...
using ..
namespace x = ...
// anything you need in header but shouldn't be linked with original name
}
// normal interface
class a: public x::...
我以前似乎沒有這種範例。我會等待其他人權衡,然後再決定是否要使用它:) – 2013-03-22 15:01:18
另請參閱http://stackoverflow.com/questions/357404/why-are-unnamed-namespaces-used-and-what-是他們的好處 – podshumok 2013-03-22 15:12:07
是關於在實現文件中使用無名稱的命名空間,與在頭文件中使用它們沒有什麼不同麼?任何你放入該命名空間的東西仍然可以被包含它的文件看到(在我的測試中)。 – 2013-03-22 15:32:29
如果你在你自己的命名空間中做的一切,那麼它很好,不是嗎?我認爲,只有在全球範圍內做到這一點,這纔是有問題的。 – Pubby 2013-03-22 14:45:40