gpt4 book ai didi

c++ - 能否在调试版本中关闭 NRVO?

转载 作者:行者123 更新时间:2023-12-04 07:39:58 24 4
gpt4 key购买 nike

在程序中如下

#include <iostream>

struct A
{
A() { std::cout << "0"; }
A( const A & ) { std::cout << "1"; }
A( A && ) noexcept { std::cout << "2"; }
};

A foo()
{
A res;
return res;
}

int main()
{
const A a = foo();
(void)a;
}

我希望命名返回值优化发生在 foo() 中,因此不会调用复制构造函数和移动构造函数。事实上 gcc 和 clang 打印“0”。

但调试配置中的 Visual Studio 2019 打印“02”。是否允许编译器在调试版本中避免 NRVO?

最佳答案

mandatory copy elision在这里不适用,是的,编译器没有义务优化任何构建中的移动,无论是调试还是优化。

这是允许的,但不是必需的。

关于c++ - 能否在调试版本中关闭 NRVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67538341/

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