Я шел над следующим примером
const int a = 12;
int b;
b = const_cast<int&>(a);
и я хотел знать, что &
в шаблоне тип параметра означает выше и почему он не будет работать без &
?
Обновить:
Позвольте мне перефразировать мой вопрос. Я понимаю, что это ссылка, но на какую переменную она ссылается? Например Вот он заявляет, что в случае указателей он ссылается на оригинальный (uncast) указатель. Я хочу знать, что он ссылается в случае не указателя типов и как можно b
б ссылка, когда она не была объявлена как ссылка?
const_cast
это не шаблон, а приведение типа. То, что кажется аргументом шаблона, является целевым типом для приведения, и в этом случае это означает, что вы хотите получить неконстантную ссылку на int
что относится к тем же объектам, что и a
,
a
является const int&
когда вы делаете const_cast
как ты это написал.
Вы можете изменять cv-квалификаторы указателей и ссылочных типов только с const_cast
, а не ценностей. Это связано с тем, что указание константы для значений r имеет смысл только в том случае, если это ссылка или тип указателя, и, следовательно, ее можно изменить.
Так что если вы просто хотите (не константное) значение переменной a
, просто напиши
b = a;
поскольку постоянство все равно игнорируется. b
затем копируется из a
,
В основном a является const, b не является const
поэтому const_cast в основном говорит, что b хранится в a, но удаляет const.