为什么我不应该把“using namespace std”放在在标题中?

发布于 2024-09-08 11:53:27 字数 526 浏览 5 评论 0原文

有人曾经暗示不建议在头文件中这样做:

using namespace std;

Why is it not suggest?

它会导致像这样的链接器错误吗:(为了方便起见换行)

error LNK2005: "public: __thiscall std::basic_string<char,struct 
std::char_traits<char>,class std::allocator<char> >::
~basic_string<char,struct std::char_traits<char>,class std::allocator<char> > 
(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 
already defined in tools.lib(Exception.obj) 

Someone once hinted that doing this in a header file is not advised:

using namespace std;

Why is it not advised?

Could it cause linker errors like this: (linewrapped for convenience)

error LNK2005: "public: __thiscall std::basic_string<char,struct 
std::char_traits<char>,class std::allocator<char> >::
~basic_string<char,struct std::char_traits<char>,class std::allocator<char> > 
(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 
already defined in tools.lib(Exception.obj) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一抹淡然 2024-09-15 11:53:27

因为它强制任何使用您的头文件的人将 std 命名空间纳入全局范围。如果它们有一个与标准库类之一同名的类,这可能会出现问题。

Because it forces anyone who uses your header file to bring the std namespace into global scope. This could be a problem if they have a class that has the same name as one of the standard library classes.

摇划花蜜的午后 2024-09-15 11:53:27

如果文件被包含在其他地方,编译单元将隐式获取 using 指令。当名称重叠时,这可能会导致混乱的错误。

If the file gets included elsewhere the compilation unit will implicitely get the using directive. This can lead to confusing errors when names overlap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文