我已经阅读了 C++ 面试问题的答案,其中有一个让我感到困惑:
问:C++ 编译器何时创建临时变量?
A: 如果函数参数是“const 引用”,编译器会通过以下两种方式生成临时变量。
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 参数而无法编译?