gpt4 book ai didi

C++ const 编译器优化

转载 作者:行者123 更新时间:2023-11-28 03:24:44 28 4
gpt4 key购买 nike

假设我有以下代码:

int foo () {
int const x = 0;
return x;
}

是否允许编译器将 x 移动到全局范围?

在下面的场景中呢? res2 可以根据优化而变化吗?

std::set<int const *> addrs;

int foo () {
int const x = 0;
addrs.insert(&x);
return addrs.size();
}

void bar () {
int res1 = foo();
int res2 = foo();
}

最佳答案

不,编译器不能在全局范围内移动它,因为变量不是在全局范围内声明的。范围与存储不同。范围表示可以从哪里访问变量 - 将它移动到全局范围意味着可以从任何地方访问它,但这里不是这种情况。

程序的第二部分表现出未定义的行为addrs 包含函数退出后的悬挂指针。因为 std::set 在插入时比较现有指针,这是非法的。所以我会说是的,res2 可能会有所不同,但由于 UB,而不是您怀疑的原因。

关于C++ const 编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14470832/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com