C++ Primer中关于前缀后缀递增的问题

在C++ Primer第四章第六节中有讲如下程序:
while(beg!=s.end() && !isspace(*beg))

*beg=toupper(*beg++);

将产生未定义行为,编译器可能按照下面的任意一种思路处理该表达式:

*beg=toupper(*beg);
*(beg+1)=toupper(*beg);

难道不应该是,在该行内使用未加一的beg,然后在下一行中再使用加一的beg吗?为什么会产生歧义?

阅读 3k
1 个回答

产生未定义行为是因为赋值符号左右都使用beg。
编译器不知道先执行左侧的值还是右侧的值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进