前端之家收集整理的这篇文章主要介绍了
c – 通过引用传递const指针,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很困惑,为什么以下
代码无法编译
int foo(const float* &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}
编译器给出错误:
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.这将工作:
int foo(float* const &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}
原文链接:https://www.f2er.com/c/114827.html