Grokking逗号运算符



我正在尝试查找逗号运算符。参考资料显示:

在逗号表达式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
}

当我们进行++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

相关内容

  • 没有找到相关文章

最新更新