変数

スポンサーリンク

変数の宣言

C では変数の宣言をブロックの頭部にまとめて書く必要がありましたが,C++ ではその必要はありません。
C++ では,何らかの処理を行う文よりも後に変数の宣言を書くことが許されます。

また,C++ では for 文の初期化部で変数を宣言することもできます。
for 文の初期化部で宣言した変数は,その for 文の中だけで有効です。

#include <iostream>

int main(int argc, char **argv)
{
    int a, b;
    std::cin >> a >> b;
    int sum = a + b;    // 実行文より後で宣言可能
    std::cout << sum << std::endl;

    for (int i = 0; i < argc; ++i)  // 初期化部でも宣言可能
        std::cout << argv[i] << std::endl;

    return 0;
}

初期化

変数の初期化には,直接初期化とコピー初期化の 2 種類があります。
これらの挙動の違いについては,第 11 章 で説明します。

double num(3.14);    // 直接初期化
double num = 3.14;   // コピー初期化

名前空間

名前空間 (namespace) は,名前の衝突を防ぐために使われます。

次のプログラムは,名前空間 math を定義した例です。

#include <iostream>

namespace math
{
    double pi = 3.14159;
}

double pi = 3.14;

int main()
{
    double pi = 3;

    std::cout << math::pi << std::endl;  // 3.14159
    std::cout << ::pi << std::endl;      // 3.14
    std::cout << pi << std::endl;        // 3

    return 0;
}

名前空間 math にある変数等にアクセスするには,スコープ解決演算子 :: を用いて math::pi のように書きます。
名前空間はスコープを形成するため,同一名前空間内であれば math:: の記述は不要です。

名前空間に属さない大域変数等は,グローバル名前空間に属します。
グローバル名前空間に属する pi にアクセスすることを明示するには,単に ::pi と書きます。

using 指令/宣言

次のように using 指令を用いると,指定された名前空間が可視化されます。

#include <iostream>

int main()
{
    using namespace std;     // using 指令
    cout << "hello, world" << endl;
    return 0;
}

次のように using 宣言を用いると,指定された名前が可視化されます。

#include <iostream>

int main()
{
    using std::cout;      // using 宣言
    cout << "hello, world" << std::endl;
    return 0;
}
スポンサーリンク