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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。