
31.03.2023, 21:12
|
|
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами:
6530249
Репутация:
133
|
|
Сообщение от kin4stat
Ты путаешь категорию значения с типом ссылки. Разыменование дает lvalue reference, lvalue reference сам по себе является lvalue
C++:
Код:
int
&
addr
=
*
(
int
*
)
0xBAB230
;
Ссылка - это левая часть, ее тип - lvalue reference to int.
Справа - выражение, которое после вычисления *((T*)ptr) будет lvalue выражением, но типа T, а не lvalue reference T&
Даже явный каст к T& ничего не дает, он все равно неявно преобразуется к T и инициализирует ссылку, как и сказано в стандарте
C++:
Код:
int
a
=
1
;
int
*
ptr
=
(
int
*
)
&
a
;
// даже не ссылку можно инициализировать при помощи lvalue выражения (static_cast к lvalue reference это lvalue) типа lvalue reference (int&)
int
val
=
static_cast
(
*
ptr
)
;
int
&
ref
=
static_cast
(
*
ptr
)
;
Где стандартом обозначено, что *(T*) == (T&) т.е. разыменование указателя равняется T& а не T?
|
|
|