Tri*_*dle 20 c++ user-defined-literals c++14
C++ 14包括标准定义的文字,其中包括标题中的std::string各种时间跨度<chrono>.
要使用它们,您必须说using namespace std::literals;(或者某些变化取决于您想要的文本,因为它们位于各种内联命名空间中).
这一切都很好,但我很好奇为什么using需要声明.没有前导下划线的UDL保留用于实现,因此"hello world"s在符合标准的程序中不可能有任何其他含义.
那么为什么#include <string>不足以将文字转换功能纳入范围呢?为什么我必须明确包含文字命名空间?
编辑: N3531是我能找到的提案的最新版本 - 不幸的是,它没有讨论将东西放入命名空间的动机,但只说:
可以总结[波特兰]讨论的要求如下:
- 为一组(相关的)UDL运算符使用内联命名空间
Col*_*mbo 13
已经有两个名为UDL的UDL s:一个用于字符串,一个用于秒.由于后缀的名称简洁,它们长期遭受名称冲突,因此将它们全部放入一个名称空间不能很好.因此,决定将它们放入内联命名空间,这允许明确的(using namespace std::literals::chrono_literals)和简单的using指令(using namespace std).
标准库已经定义了多个版本的s含义:
chrono::seconds文字.一个基于字符串文字,一个基于整数或double文字,当然,即它们实际上可以共存.但是,我希望将来有更多的用途s.因此,必须选择导入哪些命名空间而不是强加给你似乎是一种合理的方法.
| 归档时间: |
|
| 查看次数: |
3162 次 |
| 最近记录: |