C++ 重载流运算符、引用参数和匿名实例
c++ overloading stream operator, parameters by reference and anonymous instances
如果我有一个带有重载流运算符的 POD:
struct Value{
...
friend ostream& operator<< (ostream &out, Value &val);
...
};
我不能将流运算符用于匿名实例。例如,我不能做:
cout<<Value();
这给了我:
error: ambiguous overload for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘Value’)
另一方面,我可以按值传递 POD,但我想避免复制。有没有办法两者兼而有之?
Value v1;
cout<<v1<<" "<<Value()<<endl;
由于运算符不应修改正确的操作数,因此应通过引用const
来获取它:
friend ostream& operator<< (ostream &out, const Value &val);
const
引用可以绑定到临时引用,因此它将起作用(标准库也是这样做的)。
相关文章:
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 将可变参数函数的参数封装在类实例中
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- std::vector 没有重载函数的实例与参数列表匹配
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 如何在模板函数中实例化其长度使用模板参数的数组
- 函数在可变参数模板的实例化期间不可见
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- 实例化模板时,我是否必须显式显示参数包中的类型?
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 如何使用参数声明实例?
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 从模板参数包实例化的访问类实现
- C++ 可变参数模板实例化深度超过最大值 900
- 特征实例作为不同特征的模板参数
- 与参数匹配的友元模板函数实例化
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- c++ STL容器.为每个不同的实例参数化比较器
- 带有新实例参数的c++ 11委托构造函数