考虑下面的代码:为什么这里需要复制构造函数?
struct S
{
S() {}
void f();
private:
S(const S&);
};
int main()
{
bool some_condition;
S my_other_S;
(some_condition ? S() : my_other_S).f();
return 0;
}
GCC编译失败这一点,他说:
test.cpp: In function 'int main()':
test.cpp:6:5: error: 'S::S(const S&)' is private
test.cpp:13:29: error: within this context
我不明白为什么拷贝构造应在该行正发生 - 的意图是简单地呼吁f()
上有一个默认构造的S
实例,或my_other_S
,也就是说,它应该等同于:
if (some_condition)
S().f();
else
my_other_S.f();
第一种情况和为什么需要复制构造函数有什么不同?
EDIT:是否有任何方式,然后,在此表示“上执行此操作或者预先存在的对象上的临时”在表达式上下文?
是不是if语句做你想要什么?在单个表达式中做所有事情的优点是什么(混淆除外)? – 2011-03-30 07:38:43
@Bo if语句需要重复'f()'部分,这部分实际上可能是一个带有许多参数的函数,每个参数都可能是冗长的表达式的结果......您得到的想法 – HighCommander4 2011-03-30 19:37:34
@Bo此外,在某些上下文可能无法将表达式重写为if语句 - 例如,如果该表达式在初始化列表中用作实例变量的初始值设定项。 – HighCommander4 2011-03-30 20:08:08