constant initialization
![]() | このページは、Google 翻訳を使って英語版から機械翻訳されました。 翻訳には誤りや奇妙な言い回しがあるかもしれません。文章の上にポインタをおくと、元の文章が見れます。誤りを修正して翻訳を改善する手助けをしてください。翻訳についての説明は、ここをクリックしてください。 |
Sets the initial values of the static constants
目次 |
[編集]構文
static T& ref= constexpr; | (1) | ||||||||
static Tobject= constexpr; | (2) | ||||||||
[編集]説明
Constant initialization is performed after zero initialization of the static and thread-local objects and before all other initialization. Only the following variables are constant initialized:
The effects of constant initialization are the same as the effects of the corresponding initialization, except that it's guaranteed that it is complete before any other initialization of a static or thread-local object begins, and it may be performed at compile time.
The object that was initialized by constant initialization can be used in constant expressions, e.g. in an array declaration.
[編集]ノート
The compiler is permitted to initialize other static and thread-local objects using constant initialization, if it can guarantee that the value would be the same as if the standard order of initialization was followed. Such objects can be used in constant expressions, but this use is not portable.
[編集]例
#include <iostream>#include <array> struct S {staticconstint c;};constint d =10* S::c;// not a constant expression: S::c has no preceding// initializer, this initialization happens after constconstint S::c=5;// constant initialization, guaranteed to happen firstint main(){std::cout<<"d = "<< d <<'\n';std::array<int, S::c> a1;// OK: S::c is a constant expression// std::array<int, d> a2; // error: d is not a constant expression}
出力:
d = 50