[英]Is assignment operator a sequence point under C++17? and what would be the result of this expression?
建议不要在单个表达式中多次修改 object,也不要在同一表达式中修改后使用它。
int i = 0;
++++i; // UB
++i = i++; // OK?
所以你怎么看? 你能解释一下最后一个表达式中的i
应该是什么值++i = i++;
?
我知道这样做的设计很糟糕,但这只是为了教育目的。 谢谢你。
当我针对 C++17 或 C++20 进行编译时: g++ main.cpp -std=c++17 -o prog -Wall -pedantic
我仍然收到相同的警告:
++i = i++;
这是来自 GCC 的 output:
main.cpp: In function 'int main()': main.cpp:12:12: warning: operation on 'i' may be undefined [-Wsequence-point] 12 | ++i = i++; | ~^~
main.cpp: In function 'int main()': main.cpp:12:12: warning: operation on 'i' may be undefined [-Wsequence-point] 12 | ++i = i++; | ~^~
。
现在没有序列点:我们有先排序和后排序。 当您有operator=
调用(或任何其他operator@=
调用 - 内置operator=
或用户定义调用)时,右侧先于左侧排序。 所以++i = i++
在 C++17 中有效, i++
在++i
之前排序。
正如您所写,在 C++17 之前,它是 UB。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.