【发布时间】:2016-08-28 14:54:18
【问题描述】:
考虑以下代码:
void func1(const double& x) {
x = 1.2; //compilation error! (assignment of read-only reference)
}
void func2(const double* x) {
*x = 1.3; //compilation error! (assignment of read-only location)
}
void func3(const double*& x) {
*x = 1.4; //compilation error! (assignment of read-only location)
}
int main()
{
double a = 1.1;
func1(a);
double *y = &a;
func2(y);
func3(y); //compilation error! (invalid initialization of reference of type 'const double*&' from expression of type 'double*')
return 0;
}
在这里,我的理解是func1() 引用一个双精度,而func2() 使用一个指向双精度的指针。在这两种情况下,const 关键字意味着函数不能修改 double 的值。因此,我得到了预期的编译错误。
但是func3() 是怎么回事?对于这个输入参数类型的含义,我似乎找不到解释编译错误的解释。我假设const double*& x 的意思是“对double* 的引用,它不能被修改”。但这似乎是错误的解释:我不能发送double*(但我可以发送const double*)并且我可以修改指针指向的地址(但我不能修改@指针指向的987654332@)。
我想我的困惑来自对 const 关键字“附加”到:&? 的误解。到double*? const double*& x 的解释是什么可以消除我的困惑?
编辑:这个问题与建议的重复问题不同,因为它在很大程度上与如何解释 const 关键字“附加到”的内容有关。
【问题讨论】:
-
const double*&表示“引用const double*”。你已经知道后者是什么意思了,因为你刚刚描述了它:它的意思是虽然指针可以修改,但指向的东西不能。 -
另外:如果不确定声明的含义,cdecl.org 很好。
标签: c++ constants pass-by-reference