gpt4 book ai didi

c++ - 在if block 中调用函数时如何使用复制省略

转载 作者:行者123 更新时间:2023-12-01 13:52:16 25 4
gpt4 key购买 nike

在下面的片段中,没有移动也没有 A 的拷贝由于复制省略而发生

struct A;
A function1();
A function2();

int main(int argc, char**) {
if (argc > 3) {
A a = function1();
} else {
A a = function2();
}
return 0;
}
这很好,但是 a在 if 块之外无法访问。申报时 a外面,然后移动发生
struct A;
A function1();
A function2();

int main(int argc, char**) {
A a;
if (argc > 3) {
a = function1();
} else {
a = function2();
}
return 0;
}
当它应该在调用站点上的 if 块中发生到 if 范围之外的变量中时,从复制省略中获利的推荐方法是什么?
Compiler-Exlorer link

最佳答案

在这种特殊情况下,您可以使用三元条件:

A a = argc>3 ? function1() : function2();
在更复杂的情况下,您可能需要保存条件并进行多项检查,例如
const bool cond = argc>3;
A a = cond ? function1() : function2();
A b = cond ? function3() : function4();

关于c++ - 在if block 中调用函数时如何使用复制省略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62715815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com