В этом случае окончательное приведение не требуется. Следующее выражение:
(*(const u32 *)x)
возвращает значение "const u32". Поскольку вы присваиваете это переменной (которая, вероятно, является переменной u32), вы делаете копию значения «const u32», и эта копия не обязательно должна быть const. Вы сами решаете, хотите ли вы, чтобы копия, которую вы только что сделали, была постоянной или нет. Так что это действительно:
u32 var = *(const u32 *)x;
Но это также верно:
const u32 var = *(const u32 *)x;
Но в этом случае вы не можете больше изменять значение var после присваивания.
Обратите внимание, что это утверждение недопустимо:
u32 &var = *(const u32 *)x;
В этом случае вы не делаете копию, но создаете псевдоним var для содержимого переменной x, и если результатом выражения является const, ваш псевдоним также должен быть const.
Компилятор, вероятно, выдаст вам сообщение об ошибке, подобное этому:
cannot convert from 'const u32' to 'u32 &'
Вместо этого вы должны написать это:
const u32 &var = *(const u32 *)x;