我正在写我的课并测试它。似乎逗号运算符(运算符)拒绝工作,程序只是跳过它。这是我正在运行的代码
fileObj << buffer,40;
我编写了以下运算符(仅显示原型,代码不相关):
const file_t& operator<<(const void* buffer);
void operator,(int length);
“运营商&lt;&lt;”工作正常,程序使用它,但当它到达“操作员”时,它只是跳过它甚至不存在。毋庸置疑,两家运营商相互依赖。
知道为什么跳过逗号运算符?感谢。
答案 0 :(得分:6)
您的<<
运算符返回 const file_t引用。您的逗号运算符是非const 函数。由于类型不匹配,编译器不会选择逗号运算符来执行操作。相反,它使用内置的逗号运算符,它只是计算两个操作数并返回正确的操作数。 (并且由于右侧操作数的评估在您的示例中没有副作用,因此看起来好像根本没有调用。)
如果你的逗号运算符没有修改它被调用的对象,那么将它设为const:
void operator,(int length) const;
如果操作员需要修改对象,则不要从<<
运算符返回const对象:
file_t& operator<<(void const* buffer);