Как сформировать строку C ++ из конкатенации строковых литералов? - PullRequest
2 голосов
/ 07 июня 2011

Я хотел бы объединить строковые литералы и целые, например:
string message("That value should be between " + MIN_VALUE + " and " + MAX_VALUE);

Но это дает мне эту ошибку:

error: invalid operands of types ‘const char*’ and ‘const char [6]’ to binary ‘operator+’|

Как правильно это сделать? Я мог бы разделить это на 2 строковых объявления (каждое объединяет строковый литерал и целое число), но это ужасно. Я также пробовал << оператор. </p>

Спасибо

Ответы [ 5 ]

6 голосов
/ 07 июня 2011

Для этого вам, вероятно, следует использовать stringstream.

#include <sstream>

std::stringstream s;
s << "This value shoud be between " << MIN_VALUE << " and " << MAX_VALUE;
message = s.str();
1 голос
/ 07 июня 2011

Есть много способов сделать это, но мой любимый:

string message(string("That value should be between ") + MIN_VALUE + " and " + MAX_VALUE);

Это дополнительное string() вокруг первого литерала имеет все значение в мире, потому что есть перегруженный string::operator+(const char*), который возвращает string, а operator+ имеет ассоциативность слева направо, поэтому превращается в цепочку operator+ звонков.

1 голос
/ 07 июня 2011

Вы, вероятно, хотите использовать строковый поток, подобный этому:

std::stringstream msgstream;
msgstream << "That value should be between " << MIN_VALUE << " and " <<  MAX_VALUE;
std::string message(msgstream.c_str());
1 голос
/ 07 июня 2011

C ++ способ сделать это - использовать stringstream , тогда вы можете использовать оператор <<. Это даст вам более последовательное чувство кода </p>

1 голос
/ 07 июня 2011
#include <sstream>
#include <string>

template <typename T>
std::string Str( const T & t ) {
     std::ostringstream os;
     os << t;
     return os.str();
}



std::string message = "That value should be between " + Str( MIN_VALUE ) 
                       + " and " + Str( MAX_VALUE );
...