C++ 14包含标准定义的文字,其中包括std::string
和<chrono>
标题中的各种时间片段。默认情况下,为什么全局名称空间中不包含C++ 14标准定义的文字?
要使用它们,您必须说using namespace std::literals;
(或者由于它们在各种内联命名空间中,所以需要根据所需的字面值进行一些变化)。
这一切都很好,但我很好奇为什么using
声明是必需的。没有前导下划线的UDL被保留用于执行,因此不可能在符合标准的程序中意味着任何其他内容。
那么为什么#include <string>
不足以将文字转换函数带入范围呢?为什么我必须明确包含文字命名空间?
编辑:N3531是最近的我能找到的提案版本 - 遗憾的是它不讨论动机把事情的命名空间,但只说:
人们可以总结的[波特兰]讨论的要求如下:
- 使用直列命名空间一个(组相关的)UDL运营商(多个)
可能出于同样的原因,用户定义的文字必须以'_'开始:[forward compatibility](http://en.wikipedia.org/wiki/Forward_compatibility)。他们预计将来会在某些时候添加更多的文字,我想他们会将它们放在不同的名称空间中以避免命名冲突。 – Cornstalks 2014-10-27 14:56:34
@关闭选民:我非常怀疑这是基于意见的。标准委员会做出了决定。这是问*为什么他们做出了他们所做的决定。这不是基于意见。它基于事实上在委员会内的历史讨论和决定。 – Cornstalks 2014-10-27 14:58:48
“不带前导下划线的UDL被保留用于实现”哪里以及在哪个版本中? – 2014-10-27 15:03:13