我正在尝试使用逗号运算符。该参考说:
在逗号表达式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] 删除。
我来说两句