一般来说,using namespace
在全球范围内是被认为是一种不好的做法 https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice。然而,根据参考参数 http://en.cppreference.com/w/cpp/language/user_literal#Literal_operators,不以下划线开头的标识符(_
) 在用户定义文字的情况下为标准库保留。
用作的标识符ud-后缀用于将调用此函数的用户定义文字。必须以下划线_开头:不以下划线开头的后缀是为标准库提供的文字运算符保留的。
这是否意味着我可以安全地做using namespace std::literals;
在全球范围内?
这些用户定义的文字是相当新的。您必须了解这里的标准主体;他们没有实际使用的经验(不像Boost)。因此他们想出了一种保守的方法:一方面,预定义的后缀位于namespace std
,另一方面用户定义的文字必须以_
.
这确实在中间留下了一个开放空间:不以_
但都是在全局命名空间中定义的。当我们获得现有文字的经验时,可能会决定由谁来定义这些文字。
因此,为了让您的代码面向未来,无论未来标准中做出什么选择,您都不应该给其他人带来太多问题。但这是否意味着“避免using
在全局命名空间中”?不。每个翻译单元都可以做出自己的选择。在您自己的 .cpp 文件中,做您喜欢做的事情。但您不应该影响其他翻译单元。因此实际规则是:
using namespace std::literals
is 标头中不安全.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)