好吧,我有点尴尬地问这个问题,但我只是想确定一下...
众所周知,C在布尔表达式中使用短路评估:
int c = 0;
if (c && func(c)) { /* whatever... */ }
在该示例func(c)中未调用,因为c计算结果为0。但是,在比较复杂的例子中,比较的副作用会改变接下来要比较的变量吗?像这样:
int c; /* this is not even initialized... */
if (canInitWithSomeValue(&c) && c == SOMETHING) { /*...*/ }
函数canInitWithSomeValue返回true并在成功的情况下更改给定指针的值。是否保证后续比较(c == SOMETHING在此示例中)使用设置的值canInitWithSomeValue(&c)?
编译器使用了多么繁重的优化?
不负相思意
ABOUTYOU
慕尼黑的夜晚无繁华
相关分类