我需要编写以下代码(在 C++11 中):
X x;
if( cond ) {
x = X(foo);
}
else {
x = X(foo, bar);
}
// ... continue using x
问题是“X x”将调用默认构造函数并创建不需要的 X 类型对象。
我该如何解决这个问题?我怀疑可能有一些涉及新的 && 运算符的解决方案,但我不太明白......
最佳答案
使用它来避免任何临时对象:
auto&& x = cond ? X(foo) : X(foo, bar);
如果初始化更复杂,使用 lambda:
auto&& x = [&]()->X{
if(cond1)
return {};
if(cond2)
return {foo};
return {foo, bar};
}();
使用通用引用,lambda 通过引用获取,以避免无用的复制。
还使用了没有未命名临时文件的列表初始化,因此不会为 lambda 的返回进行任何复制。
请注意,列表初始化语法有利于期望初始化列表的构造函数。
在这种情况下,您必须依赖 RVO。
关于c++ - 在各种开关情况下初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26265966/