C ++三元运算符字符串连接

时间:2014-03-14 17:24:44

标签: c++

我已经看到这个问题要求其他语言,但不是C ++。这就是我要做的事情:

bool a = true;
string s;
s.append("a:" + (a? "true" : "false"));    
cout << s << endl;

我收到编译错误,指出我无法添加两个指针。是什么给了什么?

6 个答案:

答案 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";