c++ - C++ 中的运算符优先级
问题描述
对于以下功能
int search(int n) { return arr[n] == n ? n : arr[n] = search(arr[n]); }
不太确定它应该做什么。根据我对运算符优先级的了解,我的猜测是上面相当于
int search(int n) {
if (arr[n] == n) {
return n;
} else {
return arr[n] = search(arr[n]);
}
}
但是对我来说,该函数返回一个分配真的没有意义吗?还是我完全解释错了?
解决方案
您对表达式的扩展在我看来是正确的。
我认为您缺少的是可以将赋值表达式作为值进行评估。返回的值是赋值后左操作数的值。
所以在它被赋予返回值后arr[n] = search(arr[n])
有效地返回。arr[n]
search(arr[n])
这个 SO 答案涵盖了允许这样做并回答类似问题的标准部分。
在使用该函数测试了一些不同的初始数组和参数之后,我应该警告您它可能会引发 StackOverflow 异常!
例如:arr[2] = {1,0};
和search(1);
。
推荐阅读
- spring-boot - 是否可以让我的一些@SpringBootTest 应用程序请求绕过(间谍而不是存根)自动配置的 MockRestServiceServer?
- javascript - 如何使用/链接外部api在grapejs组件中显示获取的数据
- ubuntu - Ubuntu GStreamer 警告:打开 bin 时出错:没有元素“nvvideoconvert”
- java - 将java适配器文件转换为kotlin时可以删除@JvmField注释吗
- javascript - Imacros(javascript)从自定义输入对话框中获取变量值
- python - 像脚本一样将命名参数和文件传入和传出 docker 容器
- javascript - 节点js fs.copyFileSync没有完全复制文件
- node.js - 使用 nodejs 客户端有条件地将 term 和 multi_match 过滤器添加到 elasticsearch
- matlab - 使用 Matlab 的反斜杠运算符来反转稀疏矩阵会导致某些条目被四舍五入为零
- node.js - 如何使用 axios 附加带有 GET 请求的有效负载?