@user108

В чем смысл определения const int &ref=1;?

В чем смысл определения:
const int &ref=1;
Для чего это может понадобиться и как это работает?
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Для начала стоит немного пробежаться по категориям выражений в современном C++.
Из статьи будет видно что 1 имеет категорию prvalue. 1 является литералом и не является строковым литералом. Это - литерал с типом int по умолчанию.

Если снова обратиться к статье и посмотреть свойства prvalue, то будет видно, в частности, что prvalue:
  • имеют всегда полный тип;
  • не имеют размещения, а следовательно не имеют адреса в памяти;
  • могут использоваться для инициализации cvq-lvalue-ref и rvalue-ref.

Последний пункт говорит о том, что код const int& ref = 1; или int&& ref = 1; является полностью стандартным.
ref в этом случае будет ссылаться на переданный литерал и отсутствие размещения литерала этому не помеха.

Смысл подобных выражений в том чтобы позволить написать такой код.
void foo( const int& ref );

void bar()
{
  foo( 1 );
}


Смыл конкретно кода const int &ref=1; можно найти в том, чтобы не писать магические константы в коде. ref - очень плохое имя. Но голая 1 в коде еще хуже.
Инженер ПО свой код пишет не для транслятора, а для своих сотрудников. Транслятор разберется в любом коде и по любому синтаксически верному коду всегда произведет работающий исполняемый код. Но другие люди в коде смогут разобраться только тогда, когда этот код написан доступным для понимания образом.

Чтобы код было легче понять, его документируют. Документация бывает разная. Это могут быть комментарии, это может быть отдельный документ. Но лучше всего код понимается тогда, когда он "самодоукментируется" [1], [2], т.е. когда сам код однозначно поясняет цели своего существования и принципы своей работы.
Чтобы код сам себя пояснял, имена функций, переменных и констант, имена типов и прочих рукописных конструкций должны как можно более ясно отражать цели своего существования. В частности, чтобы код не пестрил безликими магическими числами [?], эти числа принято обличать в т.н. поясняющие константы.
Такую константу можно определить как cvq-lvalue-ref, назначить понятное в контексте кода имя и присвоить ей требуемый литерал.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Ни для чего. Более того, это не дожно компилироваться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы