谢谢大家的回答:-)
在这里我收集你的好主意;-)
回答
按值返回 不是const
。例如,我们可以调用return by value的非常量成员函数:
class C {
public:
int x;
void set (int n) { x = n; } // non-const function
};
C bar() { return C(); }
int main ()
{
bar.set(5); // OK
}
但是C++ 不允许对临时对象进行非常量引用。但是 C++11 允许对临时对象
进行非 const右值引用。;-)
解释
class C {};
void foo (C& c) {}
C bar() { return C(); }
//bar() returns a temporary object
//temporary objects cannot be non-const referenced
int main()
{
//foo() wants a mutable reference (i.e. non-const)
foo( bar() ); // => compilation error
}
三个修复
变更foo
声明
void foo (const C& c) {}
使用另一个对象
int main()
{
C c;
foo( c = bar() );
}
使用 C++11右值引用
void foo(C && c) {}
而且
为了确认临时对象是 const,上面的源代码由于同样的原因而失败:
class C {};
void foo(C& c) {}
int main()
{
foo( C() );
}