c++ - 如何使用 + 运算符连接字符串
问题描述
为什么一个被允许而另一个产生错误。谁能解释一下。
#include<string>
using namespace std;
int main()
{
string s3 = "Why";
string s11 = "hello" + " , " + s3; // It gives error
string s11 = s3 + " , " +"hello" ; // This works fine.
}
解决方案
由于运算符优先级,该行
string s11 = "hello" + " , " + s3;
被处理为
string s11 = ("hello" + " , " ) + s3;
子表达式"hello" + " , "
不合法。第一项是类型char const [6]
(6 的数组char const
),第二项是类型char const [4]
(4 的数组char const
)。
+
两者之间没有运营商。这就是为什么它是一个编译器错误。
第二行
string s11 = s3 + " , " + "hello"
被处理为
string s11 = (s3 + " , ") + "hello"
子表达式s3 + " , "
是有效的,因为存在operator+
支持该操作的 的重载。子表达式的计算结果为 a std::string
。因此,后续+ "hello"
也是支持的操作。
推荐阅读
- haskell - a->a->Ordering 是否有一个简短的 Lambda 表达式?
- c++ - 在 C++ 中使用 istringstream
- python - 如何将文本文件的多行作为字典中键的值(在元组中)?
- javascript - AngularJS Material - 在 md-radio-button 上进行 ng-checked,以 ng-value 作为对象
- javascript - 操纵同一类的两个“背景”
- python - SQL注入 MariaDB python CTF
- ios - StackView 子视图常量宽度
- java - java,如何将 json ajax 数据解析为 jsonArray?(使用 @requestparam 映射,而不是 VO)
- sql - PostgreSQL - 哪个电影类别在我们的客户中最受欢迎?
- java - Apache Commons Fileupload Vulnerabilities,远程代码执行,漏洞利用代码