首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在调试版本中关闭NRVO吗?

可以在调试版本中关闭NRVO吗?
EN

Stack Overflow用户
提问于 2021-05-15 01:10:44
回答 1查看 49关注 0票数 3

在程序中,如下所示

代码语言:javascript
复制
#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()中进行命名返回值优化,因此既不会调用copy构造函数,也不会调用移动构造函数。而事实上,gcc和当当印制了“0”。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-15 01:17:22

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67538341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档