Я очень удивлен, обнаружив, что этот код не компилируется (при условии, что мы используем компилятор C ++ 14):
std::cout << "hello world!\n"s;
Ошибка, показанная ideone, является следующей:
невозможно найти строковый литерал operator '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
Я думал, что причина может заключаться в том, чтобы не конфликтовать с моими пользовательскими литералами, но стандарт гласит, что я перед ними должен стоять '_'
знак подчеркивания:
предупреждение: суффиксы буквальных операторов, которым не предшествует '_', зарезервированы для будущей стандартизации
Итак, я очень удивлен, кто-нибудь знает причину помещения оператора строкового литерала в std::literals::string_literals
?
Спасибо.
using namespace std::literals;
, а не делатьusing std::operator"" s;
илиusing namespace std;
- person chris   schedule 18.02.2015