日々の記録。

プログラミングのメモや感じた事などを記録。

C++が破綻しているなぁと感じる一例

const intは定数として利用できるけど、容易にそれを破壊(?)できてしまうところとか。

 int main() {

   const int x = 10;
   int* p = const_cast<int*>(&x);
   *p = 1;

   int y[x]; // x は 10となる。 (osx gccとwin vc2010で確認)
   cout << x << "," << *p << endl; // xは10, pは1。
   cout << &x << "," << p << endl; // xとpは同じアドレス。
 
   return 0;
 }

constをキャストで外している事が論外であるのは分かるけど何だかなぁ。 せめて定数として扱える箇所は、メモリ書込禁止の方が整合性がとれる気がする。 このあたりは言語仕様というよりコンパイラ依存なんだろうか?