Это два функционально эквивалентных объявления:
int& a; // & associated with type
int &a; // & associated with variable
Связывание &
или *
с именем типа отражает желание программиста иметь отдельный тип указателя.Однако трудность связывания &
или *
с именем типа, а не с переменной, заключается в том, что, согласно формальному синтаксису C++
, ни &
, ни *
не являются дистрибутивными по спискупеременные.Таким образом, легко создавать вводящие в заблуждение декларации.Например, следующее объявление создает одну, а не две целочисленные ссылки.
int& a, b;
Здесь b
объявляется как целое число (не целочисленная ссылка), поскольку при использовании в объявлении &
(или *
) связан с отдельной переменной, которой он предшествует, а не с типом, которому он следует.Проблема с этим объявлением заключается в том, что визуально и a, и b кажутся ссылочными типами, даже если только a
является ссылкой, поэтому визуальная путаница вводит в заблуждение не только начинающих C++
программистов, но иногда и опытных программистов.
Не имеет значения, пишете ли вы int &a
или int& a
для C++
компилятора.Однако во избежание путаницы &
и *
следует связывать с переменной, а не с типом.