C++ の関数にて広域変数を初期値に2011年03月01日 04時57分09秒

C++ で、広域変数を用いて、関数のデフォルトの初期値を実行状況によって変えたくなった。周りに尋ねると C++ で、規定されていると言われた。

sun% cat static.cpp
#include <ostream>

int global = 2;

void p( int value = global )
{
    std::cout << value << std::endl;
}

int main()
{
    p();
    p( 1 );
    global = 3;
    p();
}

三度目の呼び出しの前に初期値として設定されている global 変数の値を変える。


sun% CC static.cpp
sun% ./a.out 
2
1
3

最初の値は 2、最後の値は 3 になっている。