在c中的sizeof函数内部赋值

roh*_*was 4 c sizeof

foo(a = b+c);
//new value of a(after the call) = b+c
//but
sizeof(a = b+c);
//new value of a = old value of a
Run Code Online (Sandbox Code Playgroud)

为什么在后一种情况下,赋值语句的结果不会反映在函数的堆栈中(包含上面的代码)?

hac*_*cks 6

sizeof是一个操作员而不是一个功能.sizeof除非是可变长度数组,否则不评估操作数.

C11:6.5.3.4 p(2):

的sizeof操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.结果是整数.如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果是整数常量.