“使用命名空间 std::literals”安全吗?

2024-05-08

一般来说,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(使用前将#替换为@)

“使用命名空间 std::literals”安全吗? 的相关文章

随机推荐