gpt4 book ai didi

c++ - 优化器能否省略在命名空间中声明的变量

转载 作者:行者123 更新时间:2023-11-30 05:38:19 25 4
gpt4 key购买 nike

我正在查看一些遗留代码,它执行类似于以下内容的操作:

namespace MyNamespace
{
const bool myVariable = f::y();
}

其中 f::y() 具有在单例拥有的映射中注册某些内容的副作用。

我的问题是,如果不直接访问 MyNamespace::myVariable,标准是否允许优化器完全消除它?这必须是链接时间优化(我认为),我不确定标准对这些事情有多少看法。我自己找不到合适的引用资料。

编译器目前是符合 C++03 标准的编译器,但很快就会迁移到 C++14 编译器。

最佳答案

如果 f::y() 具有可观察到的副作用,则不允许编译器优化该调用。我所知道的唯一实际允许编译器进行更改程序行为的优化的实例是复制对象(复制省略)。

但是如果 myVariable 在你的翻译单元中的任何地方都没有被访问*)(正如 jonathan 所解释的那样),那么编译器实际上不需要为变量保留任何空间。

简而言之:它可以优化掉变量,但很可能不会优化函数调用。

*) 我相信要查找的术语是 ODR-Used

关于c++ - 优化器能否省略在命名空间中声明的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833635/

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