C++ 运算符顺序评估

标签 c++ operators evaluation

我有代码,但它给了我一个编译错误。 我期望左右运算符顺序评估。 '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/

相关文章:

haskell - 是否可以使用 WinHugs 打印 Haskell 中的所有约简?

parsing - 语言设计 : How does evaluation of parsed expressions work in Haskell?

c++ - 使用 GCC 编译非必要的目标文件

c++ - 为什么它不使用我重载的运算符来进行++?

objective-c - 问号和冒号是什么意思(?: ternary operator) mean in objective-c?

java - 为什么 op-assign 运算符在 java 中不是类型安全的?

algorithm - 使用字符串匹配算法或动态规划对齐音符

c++ - 在不影响信号/槽机制的情况下处理由于方法内部的动态分配而导致的内存泄漏

c++ - 仅提供宽字符串逻辑字符串比较的动机

c++ - 在 C++ 模板参数中,是否可以指定该类型的类型和出现次数?