4

次の例では:

//Case 1
constexpr int doSomethingMore(int x)
{
    return x + 1;
}

//Case 2
constexpr int doSomething(int x)
{
    return ++x;
}


int main()
{}

出力:

prog.cpp: 関数 'constexpr int doSomething(int)':
prog.cpp:12:1: エラー: 式 '++ x' は定数式ではありません

ケース 1 は許可されているのに、ケース 2 は許可されていないのはなぜですか?

4

3 に答える 3

2

あなたの主張は、constexpr両方x+1の精神/技術によって++x同じであるという確かに有効です。x関数のローカル変数はどこにありますか。したがって、どのような場合でもエラーは発生しません。

この問題は C++14 で修正されました。これはフォークされたコードで、C++14 で正常にコンパイルされます。

于 2015-11-05T11:06:27.693 に答える
1

定数式は、条項 5 の最後の数ページで定義されています。

大まかに説明すると、これらはコンパイル時 (変換時) に評価できる副作用のない式です。それらを取り巻くルールは、この原則を念頭に置いて作成されています。

于 2013-06-26T10:15:14.613 に答える