【问题标题】:Qt creator -fno-elide-constructors not workingQt creator -fno-elide-constructors 不工作
【发布时间】:2019-12-06 11:11:05
【问题描述】:

我在 .pro 中使用了QMAKE_CXXFLAGS += -fno-elide-constructors,但无法获得所需的输出。 我在 Windows 10 上使用 Qt 5.9.8 MinGW 32bit

这就像 qmake 忽略了我的标志。

#include <iostream>
using namespace std;

using std::cout;using std::endl;using std::cin;
class C {
public:
C(){cout<<"C0";}
C(const C&){cout<<"Cc";cout<<endl;}
};
C fun(C c=C()) { C X=c;return X;}
int main()
{
      cout<<"1"<<endl;
  C c;
  cout<<endl;
  cout<<"2"<<endl;
  fun(c);
  cout<<endl;
  cout<<"3"<<endl;
  C y=fun();
  cout<<endl;
  cout<<"4"<<endl;
  fun(fun());
  cout<<endl;
  cout<<"5"<<endl;
  fun();
  cout<<endl;
}

这是预期的输出:

1 C0

2 抄送 抄送 抄送

3 碳酸盐 抄送 抄送 抄送

4 碳酸盐 抄送 抄送 抄送 抄送 抄送

5 碳酸盐 抄送 抄送

这是我得到的:

1 C0

2 抄送 抄送

3 C0Cc

4 碳酸盐 抄送

5 C0Cc

解决方案:

构建 -> 清理项目 现在您的 .pro 文件已更新为新标志

【问题讨论】:

  • 您使用的是哪个 C++ 版本?
  • 在我看来,编译器似乎已经优化了C X=c;,但它并没有省略副本,因为return X; 调用了复制构造函数。
  • @RinatVeliakhmedov 设置为 c++11,我试过没有
  • @Mestkon 是的,但它应该使用 fno-elide-constructors 来做到这一点
  • @Archetipo 是的,所以在我看来,该标志正在按预期工作,并且您的预期输出是错误的,因为该标志不会阻止优化变量。只有临时变量传递给复制构造函数。 C X=c; 在这种情况下不是临时变量。

标签: c++ qt


【解决方案1】:

Build -> Clean Project 现在您的 .pro 文件已更新为新标志

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 2012-08-27
    • 2022-12-14
    • 2020-06-28
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多