posts - 1, comments - 15, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

最新评论

随便插一句,在蛋疼的C++0x标准中。 i = ++i;是well defined i = i++是undefined 在C++2003里面。 i = ++i 和 i = i++ 都是undefined
@键盘农夫 i=i++ 应该算 Accessing a volatile object 这句我说错了,之前没有理解volatile object,谢谢指正。 Side effects occur whenever the value of a variable is changed by an expression evaluation. 准确的说法是: if expressions contain embedded assignments, increment operators, decrement operators, and method invocations. so evaluation of an expression can produce side effects.
Re:++运算符在C/C++与C#/JAVA中的差异 键盘农夫 2011-06-07 07:04  
@阿非 volatile object 是指 volatile int i ; 中 i 这样的数据对象 如果 i = i++ 中的 i 是 volatile 的话,那么 i = i++ 就更不具备确定性了 “在两个Sequence Point之间,同一个变量的值最多只允许被改变一次”,这个是对的 (抱歉,昨天没注意到你后来的回复)
@键盘农夫 先睡了,晚安~
@键盘农夫 Accessing a volatile object, modifying an object, modifying a file, or calling a function that does any of those operations are all side effects. i=i++ 应该算 Accessing a volatile object 你举的例子是 modifying an object 如果你觉得我说的不是很准确的话,那我换个说法“在两个Sequence Point之间,同一个变量的值最多只允许被改变一次”否则会产生side effect 从而导致结果是Undefined,因为编译器有权决定各个Side Effect的执行顺序。
Re:++运算符在C/C++与C#/JAVA中的差异 键盘农夫 2011-06-07 00:25  
@阿非 side effect不是那个意思 i = 1 也有side effect
之前我倒是知道在C/C++标准中规定了 && || , ?: 这四个运算符操作数的运算顺序,不知道这属于Sequence Points范畴的,谢谢指点。 而i=i++;则会导致 side effect,在gcc中开启 -Wsequence-point 选项可检查此类代码并给出警告。其实我倒不是想谈论什么undefined,因为这没意义。只是同样的代码在不同的语言编译器中的表现不一样,为了弄清楚原因而已。
Re:++运算符在C/C++与C#/JAVA中的差异 键盘农夫 2011-06-06 22:20  
@阿非 我的看法是对这种东西“止于不写”:未定义行为不可以出现在代码中。 后面考察汇编我不赞成,那没意义 “出于灵活性考虑”是一个方面,另一方面也是为了避免不必要、基本没有实用价值的繁琐的语言规定 实际上C和C++中有一个sequence point的概念,MSDN中恐怕应该有 离开了这个概念讨论 i = i++ 是讨论不清楚的
@键盘农夫 是的,我在文中已说明这属于C/C++编译器undefined的范畴,并且标红说明千万不要在C/C++程序中依赖求值顺序,否则会死的很惨。 我了解到原因是C/C++编译器出于灵活性考虑将此划为undefined的范畴,如你有更合理解释,愿闻其详。
Re:++运算符在C/C++与C#/JAVA中的差异 键盘农夫 2011-06-06 19:46  
[quote]egmkang: [quote]键盘农夫: 在C和C++中 i = i++ 是错误的写法 其行为是undefined undefined的东西是无法讨论的[/quote] 所以他们才讨论未定义行为,因为怎么说都是对的[/quote] 同样也可以说 怎么说都是错的
[quote]键盘农夫: 在C和C++中 i = i++ 是错误的写法 其行为是undefined undefined的东西是无法讨论的[/quote] 所以他们才讨论未定义行为,因为怎么说都是对的
Re:++运算符在C/C++与C#/JAVA中的差异 Martin Mar 2011-06-06 17:46  
搞那么多汇编的东西,大部分人都看不懂吧?
Re:++运算符在C/C++与C#/JAVA中的差异 键盘农夫 2011-06-06 17:22  
在C和C++中 i = i++ 是错误的写法 其行为是undefined undefined的东西是无法讨论的
Re:++运算符在C/C++与C#/JAVA中的差异 随风浪迹天涯 2011-06-06 17:06  
这种题目最无聊~ y一点科技含量都没有~
^_^