constexpr関数は定数式です。インライン関数は、静的な値の初期化中に定数式と見なされますか?インライン関数による静的な値の初期化は定数式で初期化されていますか?
constexpr int constexpr_add_one(int x) { return x + 1; } // implies inline
inline int inline_add_one(int x) { return x + 1; }
static const int constexpr_value = constexpr_add_one(0xaaaa0000);
static const int inline_value = inline_add_one(0xbbbb0000);
// Aside:
// static constexpr int another_constexpr_value = constexpr_add_one(0xcccc0000);
// error: call to non-constexpr function ‘int inline_add_one(int)’
// static constexpr int another_inline_value = inline_add_one(0xdddd0000);
volatile int value;
int main() {
value = constexpr_value;
value = inline_value;
}
C++標準では、「定数式」(「夜は 'constexpr'なし)の定義を提供していますか?
は、私は約constexpr
ないinline
機能を話しているstatic
値の初期化のためのG ++ 4.8.4
をどうなりますか? –
@RichardCrittenインラインの場合のエラーです。 –
はありません、非常に最小限のアセンブリを生成するために重い最適化の多くを行うことができます。この例コンパイラであってもよいが、constexpr_one'だけで、コンパイル時に直接計算値(だろう 'に対し、デバッグビルドでは、' inline_one'は、通常のコールのセマンティクスを持っているでしょう)割り当て。 – Arunmu