【发布时间】:2021-11-28 22:17:17
【问题描述】:
#include <iostream>
using namespace std;
int addmult(int ii, int jj);
int main() {
int i = 3, j = 4, k, l;
k = addmult(i, j); // 12
l = addmult(i, j); // 12
cout << k << "\n" << l; // 12 12
}
int addmult(int ii, int jj) {
int kk, ll;
kk = ii + jj; // 7
ll = ii * jj; // 12
int a = (kk, ll);
cout << "a = " << a << endl; // 12
return a;
};
你好,我想知道为什么我这样返回时输出结果是12。 我就这样返回了 (val1, val2),但我发现只返回了 b。
【问题讨论】:
-
(kk, ll)不是 C++ 中的元组。这是一个表达式,首先计算kk,然后计算ll。因此kk被丢弃并且没有副作用。仅供参考:Comma operator。要构造元组,请查看std::pair或std::tuple。但是,函数的返回类型int不允许返回tuples 或pairs。对我来说,您似乎以前可能在 Python 中工作过。请考虑到 C++ 是一种非常不同的语言。 -
简而言之:
c++是一门必须先学习的语言 -
@Scheff'sCat - 在
(kk, ll)中,逗号运算符仅丢弃评估kk的结果。它不能防止副作用。 -
@Peter 对
int kk;的读取权限有什么副作用?我同意任意表达式(恕我直言,这就是逗号运算符实际上是好的和有用的)但是一个普通的int变量? -
@Scheff'sCat - 它正在评估一个没有副作用的
int变量。您描述它的方式表明这是逗号运算符的属性,这是不正确的。