6. CとC++の違い ~ 基本コンセプト~
• Cのような仮の定義が出来ない
– どういうこと?
C++はCにあるような「仮の定義」を持たない。例えば、ファイルスコープで、
int i;
int i;
はCにおいて有効であるが、C++においては無効である。
これは初期化子がCの構文形式に制限される場合、ファイルローカルな静的オブジェクトの相互
参照定義を不可能にする。例えば、
struct X { int i; struct X *next; };
static struct X a;
static struct X b = { 0, &a };
static struct X a = { 0, &b };
わんくま同盟 東京勉強会 #69
36. スコープ その1
• 変数宣言のスコープ
const int
const int
const int
const int
const int
v = 3;
x = 12;
y = 34;
z = 56;
X = 78;
int main()
{
enum { X = X }; // X = 78
int a = x, x; // a = 12
int y = y; // uninitialized value
int z(z); // uninitialized value;
int v[v]; // same as v[3];
}
わんくま同盟 東京勉強会 #69
37. スコープ その2
• テンプレートパラメータのスコープ
typedef int T;
template<typename T = T, T init = 0> struct my_type {
T value = init;
my_type() = default;
my_type(const T& v) : value(v) {}
operator T() { return value; }
};
わんくま同盟 東京勉強会 #69