Могу ли я объявить не являющуюся членом функцию const в C ++? - PullRequest
10 голосов
/ 08 декабря 2010

Могу ли я объявить функцию, не являющуюся членом (может быть, глобальной функцией) как const в C ++? Я понимаю, что ключевое слово const фактически применяется к неявному аргументу "this", передаваемому в функциях-членах. Кроме того, поскольку только функции-члены следуют соглашению о вызовах thiscall, может ли const применяться для функций, не являющихся членами?

Если оставить в стороне то, что я пытаюсь сделать, объявив не являющуюся членом функцию const, сообщит ли об этом компилятор об ошибке?

Ответы [ 2 ]

18 голосов
/ 08 декабря 2010

Нет, только нестатическая функция-член может быть квалифицирована const.

Какую семантику вы бы ожидали от константной функции, не являющейся членом? Если вы хотите обеспечить, чтобы никакие параметры не изменялись функцией, просто возьмите их по ссылке const.

1 голос
/ 08 декабря 2010

Чтобы ответить на ваш второй вопрос: попытка использовать синтаксис функции-члена для нечленов (т.е. void foo() const;) является нарушением грамматики.Поэтому компилятор должен выдавать диагностику - либо ошибку, либо предупреждение.Он не может молча игнорировать const.Тем не менее, он может сообщить о предупреждении, а затем притвориться, что const там не было, и создать исполняемый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...