参考文献参考其他参考文献&指向引用的指针

时间:2017-02-09 05:11:27

标签: c++ reference

我正在阅读C ++入门书,我发现了以下两个陈述:

  1. 由于引用不是对象,我们可能无法定义对引用的引用。

  2. 因为引用不是对象,所以它们没有地址。因此,我们可能没有定义指向引用的指针。

  3. 但是,当我运行以下代码时,我没有收到错误或警告,我的代码运行良好:

    int main(int argc, const char * argv[]) {
        // insert code here...
    
        int i, &ri = i;
        int &bi = ri;
    
        std::cout << "The address of ri is " << &ri << std::endl;
        std::cout << "The address of bi is " << &bi << std::endl;
    
        int* p = &ri;
        std::cout << p << std::endl;
    
        return 0;
    }
    

    输出:

    The address of ri is 0x7fff5fbff76
    The address of bi is 0x7fff5fbff76c
    0x7fff5fbff76c
    

    知道为什么会有效吗?

    感谢。

3 个答案:

答案 0 :(得分:0)

他们的意思是您不能拥有int& &类型。

在您的代码中,引用ri指的是对象i

当你执行int &bi = ri;时,你没有引用引用,但是你再次引用同一个对象。

答案 1 :(得分:0)

在上面的代码中,您没有创建任何类型的变量来保存引用地址。

在代码中保存引用地址的逻辑含义为:

int&amp; bi =&amp; ri;

但是此代码会出错。

因此你的代码正在运行,因为你创建了变量,所有变量都包含变量i的地址。

答案 2 :(得分:0)

  

int&amp; bi = ri;

这意味着“将参考bi设置为等于参考ri”。与分配任何其他简单类型的方式相同。

  

int * p =&amp; ri;

聪明的编译器将“引用地址”替换为“引用引用的对象的地址”。