【发布时间】:2010-10-04 17:43:20
【问题描述】:
我读过Answers to C++ interview questions,其中有一个让我很困惑:
问: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 Lvalueb) 实际参数的类型错误,但类型可以转换为正确的类型
long temp = 3L; double value = cuberoot(temp); // long to double conversion
我的问题是一旦函数参数是const引用,为什么编译器会生成临时变量,这不是自相矛盾吗?另外,函数 Cube 是否应该因为修改了 const 参数而无法编译?
【问题讨论】:
标签: c++ reference constants temporary