是否有理由将运算符“”放入std :: literals :: string_literals?

时间:2015-02-18 17:24:11

标签: c++ c++14 string-literals user-defined-literals

我很惊讶地发现这段代码没有编译(假设我们使用的是C ++ 14编译器):

std::cout << "hello world!\n"s;

ideone显示的错误是following

  

无法找到字符串文字运算符'operator'“s'

幸运的是,使用using语句修复非常简单:

using namespace std::literals::string_literals;
std::cout << "hello world!\n"s; // Compiles!

我想知道将标准字符串用户定义的文字放在与std::string本身不同的名称空间后面是否有原因;我一直在思考它,我无法弄清楚原因。

无法与operator""s中的std::chrono发生冲突,因为它们的操作类型不同:

auto ten_seconds = 10s; // ten seconds
auto some_string = "some string"s; // some string

我原以为裁决可能不会与用户定义的文字冲突,但标准说 I must preceed them with '_' underscore

  

警告:未包含'_'的文字运算符后缀保留用于将来的标准化

所以,我很惊讶,有人知道将字符串文字运算符放入std::literals::string_literals背后的原因吗?

感谢。

0 个答案:

没有答案