Возврат оператора присваивания

Я работал над примером для этого ответа, но я забыл ввести return *this;, чтобы завершить свой оператор присваивания, поэтому оператор присваивания Val выглядит так:

Val& operator= (const int _a) {a = _a; b = _a + fmod(b, 1.0F);}

Кажется, что не должно, но gcc компилирует и запускает этот код. Как это возможно? Это похоже на функцию main, где подразумевается return?


person Jonathan Mee    schedule 19.04.2016    source источник


Ответы (1)


Нет, подразумеваемого возврата нет, но в режиме по умолчанию g++ не сообщает об отсутствии return как об ошибке. Причина этого в том, что отсутствие return делает программу неправильно сформированной, а Standard не требует никаких отчетов для неправильно сформированных программ.

Вы должны убедиться, что у вас всегда есть следующие аргументы для вашего g++: -Wall -Wextra -Werror -pedantic. Это гарантирует, что gcc будет сообщать об ошибках, подобных этой, и многом другом.

person SergeyA    schedule 19.04.2016
comment
Отсутствие возврата не делает программу неправильной. Достижение конца этой функции без возврата... делает. Тонкая разница, но ваша функция может генерировать исключение (например), и этот код будет совершенно правильным. - person Adriano Repetti; 19.04.2016
comment
@AdrianoRepetti, если есть придирки, то это он. Я бы отредактировал, но поскольку вопрос в любом случае дурак, я не вижу причин для этого :) - person SergeyA; 19.04.2016