C++逗号表达式返回值疑问:为何return(a,b)仅返回第二个值
为什么C++中
(a, b)这类表达式只返回第二个值? 嘿,这个问题其实是C++里逗号运算符的特性导致的,我来给你掰扯明白~
在C++里,逗号运算符(,)是优先级最低的运算符之一,它的行为规则很明确:
- 它会从左到右依次执行逗号分隔的所有表达式
- 执行完所有表达式后,整个逗号表达式的结果是最后一个表达式的返回值,前面所有表达式的计算结果都会被直接丢弃
结合你写的代码来看:
int a = (kk, ll);
这里的(kk, ll)就是一个标准的逗号表达式:
- 先计算
kk的值(也就是ii+jj的结果7),但这个值不会被用到,直接丢弃 - 接着计算
ll的值(也就是ii*jj的结果12) - 整个表达式的结果就是12,所以
a最终被赋值为12,后续的输出和函数返回自然都是12啦
同理,如果写return(a, b),本质也是在返回一个逗号表达式的结果,最终只会返回b的值。
如果你的需求是想同时返回多个值,逗号表达式肯定满足不了,这时候可以用C++里的std::pair、std::tuple或者自定义结构体来实现,比如:
#include <iostream> #include <utility> // 用于std::pair using namespace std; pair<int, int> addmult(int ii, int jj); int main() { int i = 3, j = 4; auto result = addmult(i, j); cout << "和:" << result.first << "\n积:" << result.second; } pair<int, int> addmult(int ii, int jj) { int kk = ii + jj; int ll = ii * jj; return {kk, ll}; // 返回一对值 }
内容的提问来源于stack exchange,提问作者김민겸
相关产品推荐
相关产品推荐

