#include <iostream>

int main(){
  int x = 10;
  float f = 5.5;
  const int& r = (int)x, &s = (int)f;
  x = 8;
  f = 1.00;
  std::cout << x << ',' << r << std::endl;
  std::cout << f << ',' << s << std::endl;
  return 0;
}
実行結果
8,8
1,5

同じキャストでも元の型と同じ型にキャストすると変数自体へのリファレンス、
違う型にキャストすると一時値へのリファレンスになります。
(int)xの方は最適化が働いているんだろうと思いますが、
このように同じキャストでも結果が違うのは仕様に準拠したものでしょうか?
コンパイラはbccです。