2016-04-19 2 views
0

Я работал на примере для this answer но я забыл ввести return *this; заключить мой оператор присваивания, так Val «s оператор присваивания выглядит следующим образом:Оператор присваивания Возвращение

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

Похоже, что это не должно , но gcc compiles and runs this code. Как это возможно? Это как функция main, где есть подразумеваемый return?

ответ

1

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

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

+0

Отсутствует возвращение делает _не_ сделать программу плохо сформированной. Достижение конца этой функции без возврата ... делает. Тонкая разница, но ваша функция может генерировать исключение (например), и этот код будет абсолютно корректным. –

+0

@AdrianoRepetti, если есть nitpicking, это тот. Я бы отредактировал, но поскольку вопрос все равно, я не вижу причин для :) – SergeyA

Смежные вопросы