开发者

Concatenation operator in C++?

I have an application in which I need to combine strings within a variable like so:

int int_arr[4];
int_arr[1] = 123;
int_arr[2] = 456;
int_arr[3] = 789;
int_arr[4] = 10;
std::string _string = "Text " + int_arr[1] + " Text " + int_arr[2] + " Text " + int_arr[3] + " Text " + int_arr[4];

It gives me the compile error

Error C2210: '+' Operato开发者_Go百科r cannot add pointers" on the second string of the expression.

As far as I can tell I am combining string literals and integers, not pointers.

Is there another concatenation operator that I should be using? Or is the expression just completely wrong and should figure out another way to implement this?

BTW I am using Visual Studio 2010


Neither C nor C++ allow concatenation of const char * and int. Even C++'s std::string, doesn't concatenate integers. Use streams instead:

std::stringstream ss;
ss << "Text " << int_arr[1] << " Text " << int_arr[2] << " Text " << int_arr[3] << " Text " << int_arr[4];
std::string _string = ss.str();


You can do this in Java since it uses the toString() method automatically on each part.

If you want to do it the same way in C++, you'll have to explicitly convert those integer to strings in order for this to work.

Something like:

#include <iostream>
#include <sstream>

std::string intToStr (int i) {
    std::ostringstream s;
    s << i;
    return s.str();
}

int main (void) {
    int var = 7;
    std::string s = "Var is '" + intToStr(var) + "'";
    std::cout << s << std::endl;
    return 0;
}

Of course, you can just use:

    std::ostringstream os;
    os << "Var is '" << var << "'";
    std::string s = os.str();

which is a lot easier.


A string literal becomes a pointer in this context. Not a std::string. (Well, to be pedantically correct, string literals are character arrays, but the name of an array has an implicit conversion to a pointer. One predefined form of the + operator takes a pointer left-argument and an integral right argument, which is the best match, so the implicit conversion takes place here. No user-defined conversion can ever take precedence over this built-in conversion, according to the C++ overloading rules.).

You should study a good C++ book, we have a list here on SO.


A string literal is an expression returning a pointer const char*.

std::stringstream _string_stream;
_string_stream << "Text " << int_arr[1] << " Text " << int_arr[2] << " Text " << int_arr[3] << " Text " << int_arr[4];
std::string _string = _string_stream.str();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜