2011/08/27

[C++]staticはやはりいる

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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。