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

时间:2016-05-03 13:54:00

标签: c++ const 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*)我可以修改指针指向的地址(但我CAN' T修改指针所指向的double

我想我的困惑来自对const关键字"附加"的误解。 :到&?到double*const double*& x的解释是什么可以消除我的困惑?

编辑:此问题与建议的副本不同,因为它在很大程度上与如何解释const关键字"附加到"。

有关。

3 个答案:

答案 0 :(得分:4)

const double*&是对指向const double的指针的引用。所以*x是一个const double,你不能这样分配。此处const附有double

你可能想要使用double* const(这是一个指向[非const] double的const指针)或double* const&(它是对[non-const] double的const指针的引用)。

答案 1 :(得分:3)

const double*& x

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

答案 2 :(得分:2)

const double*& x表示对const double*的非const引用。

当您传递double*时,需要将其转换为const double*,这是一个临时变量,无法绑定到非const引用,这是{为什么编译器抱怨。

BTW:const double* const & xconst double*的常量引用。