在C++ Primer第四章第六节中有讲如下程序:
while(beg!=s.end() && !isspace(*beg))
*beg=toupper(*beg++);
将产生未定义行为,编译器可能按照下面的任意一种思路处理该表达式:
*beg=toupper(*beg);
*(beg+1)=toupper(*beg);
难道不应该是,在该行内使用未加一的beg,然后在下一行中再使用加一的beg吗?为什么会产生歧义?
在C++ Primer第四章第六节中有讲如下程序:
while(beg!=s.end() && !isspace(*beg))
*beg=toupper(*beg++);
将产生未定义行为,编译器可能按照下面的任意一种思路处理该表达式:
*beg=toupper(*beg);
*(beg+1)=toupper(*beg);
难道不应该是,在该行内使用未加一的beg,然后在下一行中再使用加一的beg吗?为什么会产生歧义?
1 回答570 阅读✓ 已解决
1 回答648 阅读
579 阅读
产生未定义行为是因为赋值符号左右都使用beg。
编译器不知道先执行左侧的值还是右侧的值。