如何在c ++中解释“const int * const& variable”

时间:2018-01-04 01:18:58

标签: c++ pointers reference const

当一个将两个变量别名为

int a;
const int &b = a;

这两个变量实际上是相同的,因此应用于变量a的任何更改也会应用于变量b。但是,当使用指针完成相同的技巧时,它似乎不会以相同的方式工作,如以下程序所示:

#include <iostream>
int main(void) {

    int *a = (int*) 0x1;
    const int *const &b = a;// Now b should be an alias to a.
    a = (int*) 0x2;// This should change b to 0x2.
    std::cout << b << "\n";// Outputs 0x1 instead of the expected value of 0x2.

    return 0;
}

现在,变量a似乎不是变量b的别名,但为什么呢?

2 个答案:

答案 0 :(得分:12)

const int *const &是对const指向const int的引用。 (尝试从右向左阅读。)请注意,指针的类型为const int *,但不是int *(即a的类型)。引用不能直接绑定到不同的类型。对于const int *const &b = a;,将构造临时 * (类型为const int *,从a复制),然后绑定到引用;临时与a无关,因此对b的任何修改都不会影响a

注意区别。在第一个示例中,const上发出了int;在第二个示例中,const不仅限制了指针本身,还限定了指针,它使得两个指针的类型不同(int *const int *)。如果您想要对其const进行限定(这对您的实验来说似乎没有必要),您应该只在指针本身上对其进行限定,即int * const &

* lifetime of the temporary已延长至参考b的生命周期。

答案 1 :(得分:5)

const int * const & b表示对const int的const指针的引用。你想要的是int * const & b

使用这个方便的工具来破译复杂的声明。 https://cdecl.org/