Назначить или создать std :: string с учетом нескольких строк char * - PullRequest
0 голосов
/ 02 мая 2020

При инициализации 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* тоже нормально.

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Если вы используете C ++ 14 или более позднюю версию, вы можете написать

sql = "delete from "s + TABLE_NAME + ";"s;
1 голос
/ 02 мая 2020

Единственный способ заставить эту работу:

std::string str { HELLO LANG_CPP WORLD };

- использовать препроцессор #define макросы вместо constexpr переменных, например:

#define HELLO "hello"
#define LANG_CPP " c++"
#define WORLD " world"

Так что компилятор видит это:

std::string { "hello" " c++ " " world" };

Вы уже рассмотрели большинство других вариантов использования const char* / std::string, но вы не упомянули: std::ostringstream, например:

#include <sstream>

constexpr const char* HELLO = "hello";
constexpr const char* LANG_CPP = " c++";
constexpr const char* WORLD = " world";

std::ostringstream oss;
oss << HELLO << LANG_CPP << WORLD;
std::string str = oss.str();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...