逗号运算符

乌梅德·辛格·邦德拉

我正在尝试使用逗号运算符。参考说:

在逗号表达式E1,E2中,对表达式E1进行求值,将其结果丢弃(...),并在开始对表达式E2进行求值之前完成其副作用(...)。

我无法理解该子句-“ ...表达式E1被求值,其结果被舍弃(...),并且其副作用在...之前完成。” 具体来说,保留什么和丢弃什么?

例如,在此SO答案的示例中

int x = 0;
int y = some_number;
for(; x < y; ++x, --y)
{
    // Do something which uses a converging x and y
}

当我们执行a时++x,什么是“结果”(即被丢弃),什么是“副作用”(即“已完成”甚至是“保留”)?结果不应该++x被丢弃并且值x保持不变吗?呈现出递增工作例子x在这里

换句话说,给定特定的表达式,我如何推断它是否将被评估并且其结果将被丢弃,或者它是否是副作用并且其结果可能会被计算并保留?

安迪

在C ++中,表达式可以产生一个值,并可能导致副作用。在表达式中,++x, --y您有两个子表达式构成整个表达式。左边在增加后++x返回x,右边y在减少后返回该表达式将返回逗号(y的右侧,而不是左侧x

副作用左侧的被保留下来,x仍然增加。

如果您要执行分配,这可能更有意义。

例如

int x = 1;
int y = 1;
int& z = (++x, --y);
std::cout << z << std::endl;

z成为参考y,因此我们将打印0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章