При инициализации std::string
следующим образом:
std::string { "hello" + " c++ " + " world" }; // error
Ошибка из-за невозможности добавления const char*
.
Между тем:
std::string { "hello" " c++ " " world" }; // ok
Это работает благодаря компилятору magi c.
А затем, согласно руководству по кодированию Google, я использую constexpr
, поскольку операторы не должно быть жестко закодировано:
constexpr const char* HELLO = "hello";
constexpr const char* LANG_CPP = " c++";
constexpr const char* WORLD = " world";
Теперь все по-другому:
std::string str { HELLO LANG_CPP WORLD }; // error
Неявная конкатенация больше не работает.
В конце концов, я написал такой код это:
std::string str = HELLO;
str += LANG_CPP;
str += WORLD;
Другие варианты, подобные приведенным ниже, мне не нравятся:
std::string str = std::string(HELLO) + std::string(LANG_CPP) + std::string(WORLD);
std::string str = HELLO + std::string(LANG_CPP) + WORLD;
У вас есть альтернативы, которые лучше выглядят?
Обновление : я упростил код. Чтобы сосредоточиться на том, что меня интересует.
Мой оригинальный код выглядел так:
sql = "delete from " TABLE_NAME ";";
sql = "insert into " TABLE_NAME "values(" var1 ", " var2 ");";
Кстати, результат объединения не обязательно должен быть string
, const char*
тоже нормально.