我有代码,但它给了我一个编译错误。 我期望左右运算符顺序评估。 'name += ":"' 的结果是字符串,但看起来它首先评估了 ":"+ "O"。我没有找到任何明确的解释。
#include <string>
int main()
{
std::string name("HELL");
name += ":" + "O";
std::cout << "Hello, " << name << "!\n";
}
最佳答案
表达式name += ":"+ "O"
分组为name += (":"+ "O")
但这会导致编译错误,因为 ":"
和 "0"
是 const char[2]
类型,会衰减为该表达式中的 const char*
指针;并且指针不能求和!
从 C++14 开始,您可以使用用户定义的文字 ""s
将 +
置于“字符串模式”:
name += ""s + ":" + "O"
分组规则被硬连线到语言语法中,尽管用 operator precedence and associativity 来思考很方便。 .
关于C++ 运算符顺序评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173499/