C ++:运算符,(逗号)似乎不起作用

时间:2011-12-01 18:11:43

标签: c++ operators operator-overloading

我正在写我的课并测试它。似乎逗号运算符(运算符)拒绝工作,程序只是跳过它。这是我正在运行的代码

fileObj << buffer,40;

我编写了以下运算符(仅显示原型,代码不相关):

const file_t& operator<<(const void* buffer);
void operator,(int length);

“运营商&lt;&lt;”工作正常,程序使用它,但当它到达“操作员”时,它只是跳过它甚至不存在。毋庸置疑,两家运营商相互依赖。

知道为什么跳过逗号运算符?感谢。

1 个答案:

答案 0 :(得分:6)

您的<<运算符返回 const file_t引用。您的逗号运算符是非const 函数。由于类型不匹配,编译器不会选择逗号运算符来执行操作。相反,它使用内置的逗号运算符,它只是计算两个操作数并返回正确的操作数。 (并且由于右侧操作数的评估在您的示例中没有副作用,因此看起来好像根本没有调用。)

如果你的逗号运算符没有修改它被调用的对象,那么将它设为const:

void operator,(int length) const;

如果操作员需要修改对象,则不要从<<运算符返回const对象:

file_t& operator<<(void const* buffer);