i=++i会导致未定义结果?

小竹z 2017-03-28 11:24:39
如下代码,在linux g++编译 -Wall选项运算结果可能是未定义的。vs试了下没有警告,按我的理解,应该不会导致未定义额。

int main()
{
int i=0;
i=++i;
}
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
这段代码应该不是未定义行为的。。因为根据运算法则是可以确定他的值的。。
小竹z 2017-03-29
  • 打赏
  • 举报
回复
引用 6 楼 FancyMouse 的回复:
引用 5 楼 zgxyz2010 的回复:
[quote=引用 4 楼 xsklld 的回复:] 虽然这个代码确实不是未定义行为,但一楼说得对,编译器不需要为未定义行为给出警告。
编译器是不是找事额?
不是。因为理论上就没法严格做到给所有未定义行为给警告(基于停机原理),所以没法要求编译器对所有未定义行为都警告。 而且只有在c++11的新sequence before/after定义下才是合法的。老的sequence point(c++98/c)下还是未定义行为[/quote]我尝试加了-std=c++11,仍然报警告
FancyMouse 2017-03-29
  • 打赏
  • 举报
回复
引用 5 楼 zgxyz2010 的回复:
引用 4 楼 xsklld 的回复:
虽然这个代码确实不是未定义行为,但一楼说得对,编译器不需要为未定义行为给出警告。
编译器是不是找事额?
不是。因为理论上就没法严格做到给所有未定义行为给警告(基于停机原理),所以没法要求编译器对所有未定义行为都警告。 而且只有在c++11的新sequence before/after定义下才是合法的。老的sequence point(c++98/c)下还是未定义行为
小竹z 2017-03-29
  • 打赏
  • 举报
回复
引用 4 楼 xsklld 的回复:
虽然这个代码确实不是未定义行为,但一楼说得对,编译器不需要为未定义行为给出警告。
编译器是不是找事额?
xskxzr 2017-03-28
  • 打赏
  • 举报
回复
虽然这个代码确实不是未定义行为,但一楼说得对,编译器不需要为未定义行为给出警告。
paschen 版主 2017-03-28
  • 打赏
  • 举报
回复
应该是确定的,你这是前置++,所以结果1
lin5161678 2017-03-28
  • 打赏
  • 举报
回复
未定义行为是说 编译器把这段代码 编译成任意汇编代码 都是合理的 那么 这段代码 就有了多种意思 你期待的行为只是可能性之一 比如在这里 你认为 i 的值是多少?
lin5161678 2017-03-28
  • 打赏
  • 举报
回复
是不是未定义行为 和 有没有警告毫无关系

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧