gpt4 book ai didi

c++ - 可以优化掉 "unused"对象吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:00 26 4
gpt4 key购买 nike

在这样的代码中:

void foo() {
SomeObject obj;
}

有人可能会争辩说 obj 是“未使用的”,因此可以优化掉,就像未使用的本地 int 一样。不过,这对我来说似乎是个错误,因为与 int 不同,SomeObject 构造函数可能会有重要的副作用。所以,我想知道,该语言是否明确要求不优化此类局部变量?或者程序员是否必须采取预防措施来防止此类优化?

最佳答案

如果编译器有可用的 SomeObject::SomeObject() 构造函数和 SomeObject 析构函数的定义(即,如果它们是内联定义的)并且可以在那里看到没有副作用,那么是的,这可以被优化掉(前提是你不对 obj 做任何其他需要它被完全构造的事情。)

否则,如果构造函数是在另一个翻译单元中定义的,那么编译器就不知道没有副作用,所以会进行调用(如果不是内联的,也会调用析构函数)。

一般来说,编译器可以自由执行任何不改变程序语义的优化。在这种情况下,删除一个未使用的局部变量(其构造函数和析构函数未触及任何其他代码)不会改变程序的含义,因此这样做是绝对安全的。

关于c++ - 可以优化掉 "unused"对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640079/

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