如何从字符串文字的连接形成C ++字符串?

时间:2011-06-06 20:30:50

标签: c++ string concatenation literals string-concatenation

我想连接字符串文字和整数,如下所示:
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个字符串声明(每个连接一个字符串文字和一个int)中分割它,但这很难看。我也试过<<操作

由于

5 个答案:

答案 0 :(得分:6)

你可能应该使用stringstream。

#include <sstream>

std::stringstream s;
s << "This value shoud be between " << MIN_VALUE << " and " << MAX_VALUE;
message = s.str();

答案 1 :(得分:1)

#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 );

答案 2 :(得分:1)

你可能想要使用这样的字符串流:

std::stringstream msgstream;
msgstream << "That value should be between " << MIN_VALUE << " and " <<  MAX_VALUE;
std::string message(msgstream.c_str());

答案 3 :(得分:1)

执行此操作的c ++方法是使用stringstream然后您可以使用&lt;&lt;运营商。它将为您提供更一致的代码感觉

答案 4 :(得分:1)

有很多方法可以做到这一点,但我最喜欢的是:

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

第一个文字周围的额外string()在世界上有所不同,因为有一个重载的string::operator+(const char*)会返回string,而operator+已经离开了 - 正确的关联性,所以整个事情变成了operator+个电话链。