首页 > 解决方案 > 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]);
    }
}

但是对我来说,该函数返回一个分配真的没有意义吗?还是我完全解释错了?

标签: c++

解决方案


您对表达式的扩展在我看来是正确的。

我认为您缺少的是可以将赋值表达式作为值进行评估。返回的值是赋值后左操作数的值。

所以在它被赋予返回值后arr[n] = search(arr[n])有效地返回。arr[n]search(arr[n])

这个 SO 答案涵盖了允许这样做并回答类似问题的标准部分。


在使用该函数测试了一些不同的初始数组和参数之后,我应该警告您它可能会引发 StackOverflow 异常!
例如:arr[2] = {1,0};search(1);


推荐阅读