C ++: оператор (запятая) не работает - PullRequest
2 голосов
/ 01 декабря 2011

Я сейчас пишу свой класс и проверяю его.Кажется, оператор запятой (operator,) отказывается работать, программа просто пропускает его.Это код, который я запускаю

fileObj << buffer,40;

Я написал следующие операторы (показаны только прототипы, код не актуален):

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

оператор "<<работает нормально, программа использует его, но когда прибывает к «оператору», она просто пропускает его, как будто его даже не существует.Излишне говорить, что оба оператора зависят друг от друга. </p>

Есть идеи, почему пропускается оператор запятой?Спасибо.

1 Ответ

6 голосов
/ 01 декабря 2011

Ваш оператор << возвращает ссылку const file_t.Ваш оператор запятой является неконстантной функцией.Поскольку типы не совпадают, компилятор не выбирает оператор запятой для выполнения операции.Вместо этого он использует встроенный оператор запятой, который просто оценивает оба операнда и возвращает правильный.(А так как вычисление правильного операнда не имеет побочных эффектов в вашем примере, похоже, что оно вообще не вызывается.)

Если ваш оператор запятой не изменяет вызываемый объект, то сделайтеconst:

void operator,(int length) const;

Если оператору необходимо изменить ваш объект, не возвращайте объект const из вашего оператора <<:

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