问题描述
我希望在C ++ 20中,以下代码在A和B的打印之间不会打印任何内容(因为我希望可以保证RVO起作用)。但是输出是:
A
再见
B
C
再见
再见
因此大概正在创建一个临时文件。
#include <iostream>
#include <tuple>
struct INeedElision{
int i;
~INeedElision(){
std::cout << "Bye\n";
}
};
std::tuple<int,INeedElision> f(){
int i = 47;
return {i,{47}};
}
INeedElision g(){
return {};
}
int main()
{
std::cout << "A\n";
auto x = f();
std::cout << "B\n";
auto y = g();
std::cout << "C\n";
}
此行为的原因是什么? 有没有避免复制的解决方法(不使用指针)?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)