5

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

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

ideone显示的错误如下

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

幸运的是,很容易用一个using语句来修复:

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

我想知道将标准字符串用户定义的文字放置在与其std::string本身不同的命名空间中是否有原因;我一直在想它,我想不出原因。

不可能与operator""sfrom发生冲突,std::chrono因为它们使用不同的类型:

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

我在想原因可能是不与我的用户定义的文字发生冲突,但标准说必须在它们之前加上'_'下划线

警告:不以“_”开头的文字运算符后缀保留用于将来的标准化

所以,我很惊讶,任何人都知道将字符串文字运算符放入std::literals::string_literals?

谢谢。

4

0 回答 0