考虑下面的代码:输入参数类型“const double *&”是什么意思?
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*
),我可以修改指针指向的地址(但我不能修改指针指向的double
至)。
我想我的困惑来自于关于const
关键字“附加”到的什么的误解:&
?到double*
? const double*& x
的解释是什么可以消除我的困惑?
编辑:这个问题与建议的重复不同,因为它在很大程度上与如何解释const
关键字“附加到”有关。
'const double *&'means'引用'const double *'“。你已经知道后者的意思了,因为你只是描述了它:这意味着尽管指针可以被修改,但指向的东西不可能。 –
[void(\ *(\ * f \ [\])())()](http://stackoverflow.com/questions/34548762/void-f) –
另外:[cdecl.org](如果不确定声明的含义,那么它是好的。 –