我很困惑,为什么以下代码无法编译
int foo(const float* &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}
编译器给出错误:
错误:'const float *&'类型引用的初始化无效来自'float *'类型的表达式
但是当我尝试在foo中没有引用时传递,它编译正常。
我认为无论我是否通过引用都应该表现出同样的行为。
谢谢,
答案 0 :(得分:20)
因为它不是类型安全的。考虑:
const float f = 2.0;
int foo(const float* &a) {
a = &f;
return 0;
}
int main() {
float* a;
foo(a);
*a = 7.0;
return 0;
}
任何非const
引用或指针必须在指向类型中不变,因为非const
指针或引用支持读取(协变操作)并且还写作(逆变操作)。
const
。这可行:
int foo(float* const &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}