Оператор суффикса для std::string в С++ 14
Я устанавливаю Clang 3.4 и проверяю оператор суффикса для строкового литерала "" s.
#include <string>
//1. using namespace std; // without compile error.
//2. using std::operator ""s; // or without it compile error, too.
// for success compiles, need 1. or 2. line.
int main()
{
auto s = "hello world"s;
}
Если я комментирую 1 и 2, я получаю ошибку компиляции. Но я знаю в больших проектах 1. Метод плохой,
и 2.-метод незнакомец.
QA: Можно ли использовать оператор "без s using namespace std
и using std::operator ""s
?
Ответы
Ответ 1
Завершение комментариев:
Вы должны явно задействовать эти операторы с помощью using
. Это то, что предусмотрено стандартом. Вы должны подумать о том, чтобы использовать только то, что вам нужно, либо
using namespace std::literals;
или
using namespace std::literals::string_literals;
в зависимости от ваших потребностей, причем последнее предпочтительнее в случае сомнений (только тянуть то, что вам нужно, а не больше). Как и при использовании объявлений или директив, вы хотите ограничить их минимальной практикой.
Причина того, что нужно явно вывести операторов, состоит в том, что суффиксы могут быть повторно использованы в будущих расширениях в разных контекстах.
Ответ 2
Если вы обнаружили, что второй вариант странный, это на самом деле довольно часто, вы можете ограничить область действия "using namespace std" следующим образом:
int main()
{
using namespace std;
auto s = "hello world"s;
}