本文介绍了C ++重载流运算符,按引用引用的参数和匿名实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我的POD带有重载的流运算符:
If I have a POD with an overloaded stream operator:
struct Value{
...
friend ostream& operator<< (ostream &out, Value &val);
...
};
我不能在匿名实例中使用流运算符.例如,我做不到:
I can't use the stream operator with anonymous instances.for example I can't do:
cout<<Value();
这给了我:
error: ambiguous overload for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘Value’)
另一方面,我可以按值传递POD,但我想避免复制.有办法吗?
On the other hand, I can pass the POD by value, but I would like to avoid the copy. Is there a way to both?
Value v1;
cout<<v1<<" "<<Value()<<endl;
推荐答案
由于操作员不应修改正确的操作数,因此应通过const
参考引用它:
Since the operator should not modify the right operand, it should take it by const
reference:
friend ostream& operator<< (ostream &out, const Value &val);
const
引用可以绑定到临时对象,因此它可以正常工作(这也是标准库的工作方式).
const
references can bind to temporaries, so it will work (and that's how the standard library does it as well).
这篇关于C ++重载流运算符,按引用引用的参数和匿名实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!