Подтвердить что ты не робот

Оператор суффикса для 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?

4b9b3361

Ответ 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; 
}