输入参数类型 "const double *&" 是什么意思?

What does the input argument type "const double *&" mean?

考虑以下代码:

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 关键字表示函数不能修改双精度值。因此,我得到了预期的编译错误。

但是 func3() 是怎么回事?我似乎无法找到解释此输入参数类型意味着什么来解释编译错误的解释。我假设 const double*& x 表示 "a reference to a double*, which can't be modified"。但这似乎是错误的解释:我不能发送 double*(但我可以发送 const double*)并且我可以修改指针指向的地址(但我可以' T修改指针指向的double).

我想我的困惑是因为误解了 const 关键字是什么 "attached" 到:到 &?到 double*const double*& x 的解释是什么可以消除我的困惑?

编辑:这个问题与建议的重复问题不同,因为它在很大程度上与如何解释 const 关键字 "attaches to".

的内容有关
const double*& x

意味着 x 是对指向 const double 的指针的引用,这意味着对象不能被修改(即 const 是附加到 double 的类型限定符,在这种情况下不是指针对象本身)

const double*& x,表示对const double*.

的非常量引用

当您传递 double* 时,它需要转换为 const double*,这是一个临时变量,不能绑定到非常量引用,这就是编译器抱怨的原因。

顺便说一句:const double* const & x 是对 const double* 的 const 引用。

const double*& 是对指向 const double 的指针的引用。所以 *x 是一个 const double,你不能这样赋值。 const 在此处附加到 double

您可能想使用 double* const(指向 [non-const] double 的 const 指针)或 double* const&(指向指向 [non-const] 的 const 指针的引用] 双)。