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 不工作的主要内容,如果未能解决你的问题,请参考以下文章