c++ - 另一个与序列点相关的问题

标签 c++

是的,我阅读了关于 sequence points 的文章.但是我不明白为什么 ++i = 2 会调用未定义的行为? i 的最终值无论如何都会是 2,那么表达式怎么会是 ub?

代码片段

int main()
{
  int i =0;
  ++i=2;
  return 0;
}

对不起,我的英语不是很好。

最佳答案

这对你来说很明显,因为显然 i首先 分配给i+1,然后< strong>second 被赋予值 2

然而,这两个赋值都发生在同一个序列点内,因此由编译器决定哪个先发生,哪个再发生,因此不同的编译器实现可以生成会给出不同结果的代码,因此它是 UB .

关于c++ - 另一个与序列点相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246158/

相关文章:

C++:临时参数的生命周期?

C++ 将参数发送到 exe 文件

c++ - 基于上一个任务的 sigchld() 执行新任务

c++ - 将元素插入二维 vector C++

c++ - 如何在 POCO::Net::HTTPResponse 对象中获取内容编码?

c++ - 指针模板特化

C++ 前向类声明

c++ - IDXGISwapChain::存在内存泄漏

c++ - 基于 IOKit 的 kext 驱动程序中的单例类

c++ - 是否存在阻止内置函数拥有静态成员的技术限制?