这个语句如何工作`int k =(a ++,++ a);`在c或c ++中

nik*_*uru 0 c c++ initialization comma comma-operator

我无法理解下面代码的输出是如何"-3"的?

#include <stdio.h>
void main()
{
    int a = -5;
    int k = (a++, ++a);
    printf("%d\n", k);
}
Run Code Online (Sandbox Code Playgroud)

int k = (a++, ++a);在c或c ++中这个陈述背后的概念是什么 ?

Cor*_*mer 5

它起作用是因为,操作员创建了一个序列点.

§5.19.1(逗号运算符)

逗号运算符从左到右分组.用逗号分隔的一对表达式从左到右进行评估 ; 左表达式是废弃的值表达式(第5条).在与右表达式相关联的每个值计算和副作用之前,对与左表达式相关联的每个值计算和副作用进行排序.结果的类型和值是右操作数的类型和值; 结果与右操作数具有相同的值类别,如果右操作数是glvalue和位域,则是一个位域.如果右操作数的值是临时值(12.2),则结果是临时值.

因此:

  1. a被初始化为-5.
  2. 然后a++执行,并修改a-4.
  3. 然后++a执行,修改a-3,并返回-3k.