我很困惑为什么以下代码无法编译
int foo(const float* &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}
编译器给出错误:
block 引用>error: invalid initialization of reference of type 'const float*&' from expression of type 'float*'
但是当我尝试在 foo 中不通过引用传递时,它编译得很好。
我认为无论我是否通过引用传递,它都应该显示相同的行为。
谢谢
最佳答案
因为它不是类型安全的。考虑:
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;
}
关于c++ - 通过引用传递 const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514688/