我很惊讶地发现这段代码无法编译(假设我们使用的是 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""s
from发生冲突,std::chrono
因为它们使用不同的类型:
auto ten_seconds = 10s; // ten seconds
auto some_string = "some string"s; // some string
我在想原因可能是不与我的用户定义的文字发生冲突,但标准说我必须在它们之前加上'_'
下划线:
警告:不以“_”开头的文字运算符后缀保留用于将来的标准化
所以,我很惊讶,任何人都知道将字符串文字运算符放入std::literals::string_literals
?
谢谢。