C++では、const変数はデフォルトでローカルスコープだ。
本では「デフォルトで外部リンケージを持たない」とある。
簡単な例では、こんなのか。
[inc.h] #ifndef INC_H_ #define INC_H_ const int A = 5; #endif [a.cpp] #include "inc.h" int f() { return A; } [b.cpp] #include "inc.h" int g() { return A * 2; }
コンパイルしてないけど、Cだとリンクエラーになるはず。
C++だと通るはず。
エラーになるのは、変数Aの定義が複数あるからだ。
C++では外部リンケージを持たないので、各ファイル内で閉じている。
イメージとしては、「static const int A=5;」と書かれているような感じだ。
ふと思ったのだが、もしかしたら最近のC++ではクラスに定義するstatic const変数の「static」もなくていけるようになったりしてないだろうか。
const変数はデフォルトでexternされないのだから、staticがなくてもわかるやん、と。
やってみたら、エラーになった。
まあ、そんなことはないってことだ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。