c++ - 未使用的函数参数可以优化掉吗?

标签 c++

我试图确保一个对象 - 由 shared_ptr 包装 - 只要通过将其作为值传递来执行函数就一直存在。但是在函数内部根本没有使用对象,所以我只想用它来“固定”:

void doSomething(std::shared_ptr<Foo>) {
    // Perform some operations unrelated to the passed shared_ptr.
}

int main() {
    auto myFoo{std::make_shared<Foo>()};
    doSomething(std::move(myFoo)); // Is 'myFoo' kept alive until doSomething returns?
    return 0;
}

我确实检查了不同优化级别 (GCC) 上的行为,它似乎按预期工作,但我不知道编译器是否仍可能在某些情况下优化它。

最佳答案

您不必担心 - 调用站点 的函数参数的生命周期保证在函数调用后继续存在。 (这就是为什么 foo(s.c_str()) 对于 std::string s 起作用的原因。)

编译器不允许违反该规则,以as if 规则灵 active 为准。

关于c++ - 未使用的函数参数可以优化掉吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63737788/

相关文章:

c++ - 如何在 Unix 中将环境变量传递给 C++ 程序

c++ - QT通过C++添加Map QML Items

c++ - 如何配置 freeglut 以使用 Code::Blocks

c++ - InternetGetLastResponseInfo 返回奇怪的字符而不是错误消息

c++ - 如何测试分配器是否使用 std::allocate 进行内存分配?

c++ - sfml pollEvent,每个新图像都会删除前一个图像

javascript - 三星智能电视 - SEF 与 PNaCL

c++ - cocos2d-x 退出回调?

c++ - 使用类作为 STL 映射的值 - Undefined Symbol

c++ - 关于 C++ 中的声明式编程