我已经看到这个问题要求其他语言,但不是C ++。这就是我要做的事情:
bool a = true;
string s;
s.append("a:" + (a? "true" : "false"));
cout << s << endl;
我收到编译错误,指出我无法添加两个指针。是什么给了什么?
答案 0 :(得分:10)
s.append(string("a:") + (a? "true" : "false"));
答案 1 :(得分:2)
"true"
,"false"
,"a:"
,"b:"
和"c:"
是指针(实际上是原始字符数组)。当您使用+
(例如"a:" + "true"
)添加它们时,则不会涉及std::string
,并且它仅std::string
实际提供+
s += "a:" + std::string(a ? "true" : "false");
连接的含义。
这是我在这种情况下所做的事情:
{{1}}
答案 2 :(得分:2)
注意到这一点,但是当C ++ 14出现时,这将变得更加容易。首先,目前可以使用operator+=
代替append
:
s += std::string("a:") + (a ? "true" : "false");
在C ++ 14中,将有一个标准的operator""s
,这意味着这是可能的:
s += "a:"s + (a ? "true" : "false");
然而,基于所显示的代码,在两种情况下仍然最有意义的那个是DigitalEye's answer,因为它完全不需要强制转换。我想你的真实代码是不同的,这意味着这很快就会有用(或者已经使用了C ++ 14标准库实现)。
答案 3 :(得分:1)
尝试
bool a;
string s;
s.append(string("a:") + (a? "true" : "false"));
答案 4 :(得分:1)
因为您尝试连接两个类型为char
的数组的字符串。 "a:"
的类型为const char[3]
,您无法使用+
运算符连接此类字符串。您必须使用已定义string
运算符的类型+
,该运算符可用于连接字符串:
s.append(std::string("a:") + (a? "true" : "false"));
答案 5 :(得分:1)
“a:”是char const [3]和(a?“true”:“false”)也是char const [5](对于true)或char const [6](对于false),所以你是将+运算符应用于两个指针。
下面的代码可以工作,因为你正在调用带有char const *作为参数的字符串类的重载+ =:
s = "a:"
s += a ? "true": "false";