当我和我的朋友准备考试的时候,我的朋友说x+++;和x+=3;一样
这不是真的,但x++++;与x+=1;相同还是(x++)++;?我能概括一下吗?即x++++++++++++++;或((((((x++)++)++)++)++)++)++;等同于x+=7;。
也许这是完全错误的,对于++++++x;或++(++(++x));也是如此,相当于x+=3;
同时,它也应该推广到--x;和x--;。
发布于 2022-04-21 14:43:40
程序的行为可以使用标准中的以下规则来理解。
否则,下一个预处理令牌是最长的字符序列(),它可能构成预处理令牌,即使这会导致进一步的词法分析失败,但头名称仅在#指令中形成。
x+++++y示例:程序片段x ++ ++ + y被解析为x ++ ++ + y,如果x和y具有整数类型,则违反增量操作符的约束,即使解析x ++ + ++ y可能产生正确的表达式。 - 端例是x++++;与x+=1相同;
使用上面引用的语句,x++++将被解析为x++ ++。
但是请注意,从增量/递减运算符文档
内置后缀增量或递减运算符的操作数扩展必须是非布尔(自)算术类型或指向完全定义对象类型的可修改(非const)lvalue。结果是操作数原始值的prvalue副本。
这意味着x++的结果将是一个prvalue。因此,下一个后缀增量++不能应用于该prvalue,因为它需要一个lvalue。因此,x++++ 不会编译。
类似地,您可以使用上面引用的语句来理解代码片段中其他示例的行为。
https://stackoverflow.com/questions/71955796
复制相似问题