rav*_*avi 14 c++ const reference implicit-conversion pointer-conversion
我很困惑,为什么以下代码无法编译
int foo(const float* &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器给出错误:
错误:从'float*'类型的表达式初始化'const float*&'类型的引用无效
但是当我尝试在foo中没有引用时传递,它编译正常.
我认为它应该表现出相同的行为,无论我是否通过引用.
谢谢,
Ben*_*igt 24
因为它不是类型安全的.考虑:
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;
}
Run Code Online (Sandbox Code Playgroud)
任何非const引用或指针必须在指向类型中不变,因为非const指针或引用支持读取(协变操作)和写入(逆变操作).
const必须首先从最大的间接级别添加.这可行:
int foo(float* const &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)