私はC++インタビューの質問への回答を読みましたが、その中に私を困惑させるものがあります。
Q:C ++コンパイラによって一時変数が作成されるのはいつですか?
A:関数パラメーターが「定数参照」である場合、コンパイラーは次の2つの方法で一時変数を生成します。
a)実際の引数は正しい型ですが、左辺値ではありません
double Cube(const double & num) { num = num * num * num; return num; } double temp = 2.0; double value = cube(3.0 + temp); // argument is a expression and not a Lvalue
b)実際の引数は間違ったタイプですが、正しいタイプに変換できるタイプです。
long temp = 3L; double value = cuberoot(temp); // long to double conversion
私の質問は、関数の引数がconst参照になると、コンパイラが一時変数を生成するのはなぜですか、それは自己矛盾ではありませんか?また、関数Cubeはconst引数を変更するため、コンパイルに失敗する必要がありますか?