残念ながら、Visual C ++ 2010は、この表constexpr(Apache Stdcxxプロジェクトから)に示されているように、C ++ 11によってもたらされる機能をサポートしていません。MSVC(MicroSoft Visual Studio C / C ++コンパイラ)はまだサポートしていません(7行目を確認してください)。 )。
ただし、foo()本体をfoo.cppファイルに保持して、中間グローバル変数を使用することはできます。
inline int foo() { return 2; }
const int aConstant = foo();
次にbar.cppファイルで:
extern const int aConstant;
void bar()
{
int a = 5 * aConstant;
}
インライン化を許可するようにVisualC++を構成した場合(これがデフォルトです)、aConstantコンパイル時に初期化されます。それ以外の場合は、実行時foo()に初期化するために呼び出されますaConstantが、起動時(main()関数が呼び出される前)に呼び出されます。したがって、これは、戻り値が使用されるfoo()たびに呼び出すよりもはるかに優れています。const