Qt creator -fno-elide-constructors 不工作

Posted

技术标签:

【中文标题】Qt creator -fno-elide-constructors 不工作【英文标题】:Qt creator -fno-elide-constructors not working 【发布时间】: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; 在这种情况下不是临时变量。 【参考方案1】:

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

【讨论】:

以上是关于Qt creator -fno-elide-constructors 不工作的主要内容,如果未能解决你的问题,请参考以下文章

qt creator 构建、配置

Qt creator交叉编译带图片的程序出现问题,版本4.7

qt creator 中 ui文件 怎么用编译界面修改?

QT+QT creator+OpenCV图像灰度化

qt creator 怎么画圆环,还要填充颜色

Install Qt creator