Говоря о параметре функции, например:

void doSomething(const int const &someVal);

Насколько я понимаю, fist const указывает, что значение не будет изменено функцией, а & указывает, что значение должно передаваться по ссылке. Но что делает вторая «константа»?

c++
3
user81993 3 Окт 2014 в 22:14

2 ответа

Лучший ответ

Согласно стандарту C ++ (7.1.6.1 cv-квалификаторы)

1 Есть два квалификатора cv: const и volatile. Каждый квалификатор резюме должно появляться не более одного раза в cvqualifier- seq . Если cv-квалификатор появляется в decl-спецификаторе-seq, списке-декларатора-инициатора декларация не может быть пустой. [Примечание: 3.9.3 и 8.3.5 описывают, как cv-квалификаторы влияют на типы объектов и функций. —В конце примечания] Избыточные cv-квалификации игнорируются. [Примечание. Например, они могут быть введены с помощью typedefs. — end note]

Так что эта декларация

void doSomething(const int const &someVal);

Имеет избыточный квалификатор const, который просто игнорируется.

Второй квалификатор const имел бы смысл, если бы someVal был объявлен как ссылка на указатель const. Например

void doSomething(const int * const &someVal);
2
Vlad from Moscow 3 Окт 2014 в 18:31

Оба они должны работать:

void doSomething(const int &someVal);

void doSomething(int const &someVal);

Использование второй константы не добавляет никаких функциональных возможностей, а лишнюю следует удалить. Рекомендуется оставлять константу слева для ясности, так как она лучше выделяется.

0
CynicalProgrammer 3 Окт 2014 в 18:26