我有一些代码,以最小的完整形式展示问题(在提问时成为一个好公民),基本归结为以下几点:
#include <string>
#include <iostream>
int main (void) {
int x = 11;
std::string s = "Value was: " + x;
std::cout << "[" << s << "]" << std::endl;
return 0;
}
我期待它输出
[Value was: 11]
相反,而不是那样,我只是:
[]
为什么?为什么我不能输出我的字符串?字符串是空白的吗? cout
某种程度上被打破了吗?我离开了吗?
答案 0 :(得分:8)
"Value was: "
的类型为const char[12]
。向其中添加整数时,您实际上是引用该数组的元素。要查看效果,请将x
更改为3
。
您必须明确构建std::string
。然后,您不能连接std::string
和整数。要解决此问题,您可以写入std::ostringstream
:
#include <sstream>
std::ostringstream oss;
oss << "Value was: " << x;
std::string result = oss.str();
答案 1 :(得分:4)
你不能添加一个字符指针和一个这样的整数(你可以,但它不会做你想要的)。
您需要先将x转换为字符串。您可以使用itoa函数将整数转换为字符串,从而在C方式带外执行:
char buf[5];
itoa(x, buf, 10);
s += buf;
或者带有sstream的STD方式:
#include <sstream>
std::ostringstream oss;
oss << s << x;
std::cout << oss.str();
或直接在cout行:
std::cout << text << x;
答案 2 :(得分:4)
有趣:)这就是我们支付的C兼容性以及缺少内置string
。
无论如何,我认为最可读的方法是:
std::string s = "Value was: " + boost::lexical_cast<std::string>(x);
由于此处lexical_cast
返回类型为std::string
,因此将选择+
的正确重载。
答案 3 :(得分:2)
C ++不使用+运算符连接字符串。也没有从数据类型到字符串的自动提升。
答案 4 :(得分:2)
在C / C ++中,您不能使用+
运算符将整数附加到字符数组,因为char
数组会衰减到指针。要将int
附加到string
,请使用ostringstream
:
#include <iostream>
#include <sstream>
int main (void) {
int x = 11;
std::ostringstream out;
out << "Value was: " << x;
std::string s = out.str();
std::cout << "[" << s << "]" << std::endl;
return 0;
}