我很惊讶地发现这段代码没有编译(假设我们使用的是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
背后的原因吗?
感谢。