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

标签 c++ constants pass-by-reference

考虑以下代码:

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/

相关文章:

c++ - 编译器如何在 C++ 中获取 const 的地址?

c - 修改我也有一个 const 指针指向的值是否是未定义的行为

c++ - C++ 中的条件表达式总是 bool 类型吗?

c++ - Resharper 告诉我使用 auto 和 const

java - 编程语言中的 for 循环 VS while 循环,c++/java?

java - 使用数组列表并创建对象

python - 在 Python 中传递值

.net - 在 C++/CLI 中引用和输出

c++ - 没有指针的动态数组C++

c++ - Botan::DSA_PrivateKey 到 DSA_PublicKey 怎么样?