5

これは私がやりたいことの単純化されたバージョンです。

constexpr float f(float a, float b){
    constexpr float temp = a+b;
    return temp*temp*temp;
}

私のバージョンでは、a+b はもっと複雑なので、3 回カット アンド ペーストしたくありません。3*(a+b) を使用することも、実際の関数の有効な解決策ではありません。代数ではなく、構文に関連する質問を維持しようとしています。a+b を独自の constexpr 関数に移動することで機能させることができますが、そうでなければ役に立たない関数で名前空間を汚染したくないのです。

4

2 に答える 2

6

お気づきのように、constexpr 関数の本体内では、constexpr 変数であっても、変数を宣言することはできません。

2 番目の constexpr 関数に引数として渡すことで、一般的な式を因数分解することはまだ可能です。あなたがここに与えた例について:

constexpr float pow3(float c) {
    return c*c*c;
}

constexpr float f(float a, float b) {
    return pow3(a+b);
}
于 2012-08-23T13:37:22.903 に答える
3

これは C++11 では許可されていませんが、C++14 では許可されています。

https://en.wikipedia.org/wiki/C%2B%2B14#Relaxed_constexpr_restrictionsを参照

于 2012-08-14T18:01:43.290 に答える