【发布时间】:2013-05-09 12:11:37
【问题描述】:
当没有设置优化标志时,这段代码可以正常工作:
#include <cstdio>
int main(){
float *ptr = ({float var[10] = {1,2,3,4,5,6,7,8,9,10}; var;});
float *ptr1 = ({float var[10]; for(int i_=0;i_<10;i_++)var[i_]=i_+1; var;});
float *ptr2 = ({float var[10]; var[4]=5; var;});
printf("\n value = %f %f %f",ptr[4],ptr1[4],ptr2[4]);
}
它按预期返回5 5 5。
但是当优化标志被设置时,它返回5 0 5。
ptr1 有与循环相关的问题。为什么?
也许它是一个错误?
我使用的是最新的 4.8.0,经过测试的 x64、x86 以及其他版本。所有相同的行为。
【问题讨论】:
-
看起来像是指向过期临时对象的指针。
-
是的,有未定义行为的味道。我不知道这是合法的,尽管如此,谢谢。
-
@chris 这是一个 GNU 语言扩展
-
这是一个错误,在您的代码中。您不能返回堆栈对象的指针并在范围之外使用它。
-
@Cubbi,哦,谢谢。我没有意识到
-pedantic在 Coliru 上默认是关闭的。
标签: c++ pointers optimization gcc