考虑以下代码:
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()
引用了一个 double 值,而 func2()
接受了一个指向 double 值的指针。在这两种情况下,const
关键字都意味着 double 的值不能被函数修改。因此,我得到了预期的编译错误。
但是 func3()
发生了什么?我似乎无法找到解释此输入参数类型意味着什么来解释编译错误的解释。我假设 const double*& x
的意思是“对 double*
的引用,它不能被修改”。但这似乎是错误的解释:我不能发送 double*
(但我可以发送 const double*
)并且我可以修改地址指针指向(但我无法修改指针指向的 double
)。
我想我的困惑来自于对 const
关键字“附加”到什么的误解:&
?到 double*
? const double*& x
的解释是什么可以消除我的困惑?
编辑:这个问题与建议的重复问题不同,因为它在很大程度上与如何解释 const
关键字“附加到”的内容有关。
最佳答案
const double*&
是对指向 const double 的指针的引用。所以 *x
是一个 const double,你不能这样赋值。 const
在此处附加到 double
。
您可能想使用 double* const
(这是指向 [non-const] double 的 const 指针)或 double* const&
(这是对指向 [non-const] double 的 const 指针)。
关于c++ - 输入参数类型 "const double *&"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006206/