C++14 包括标准定义的文字,其中包括标题中std::string
的各种时间跨度。<chrono>
要使用它们,您必须说using namespace std::literals;
(或一些变化,具体取决于您想要的文字,因为它们位于各种内联名称空间中)。
这一切都很好,但我很好奇为什么using
需要声明。没有前导下划线的 UDL 被保留用于实现,因此"hello world"s
在符合标准的程序中不可能有任何其他含义。
那么为什么#include <string>
将文字转换功能引入范围还不够呢?为什么我必须明确包含文字命名空间?
编辑: N3531是我能找到的最新版本的提案——不幸的是,它没有讨论将事物放入命名空间的动机,而只是说:
可以将[波特兰]讨论的要求总结如下:
- 为(一组相关的)UDL 运算符使用内联命名空间