首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用指其他引用&指向引用的指针

引用指其他引用&指向引用的指针
EN

Stack Overflow用户
提问于 2017-02-09 05:11:26
回答 3查看 85关注 0票数 1

我正在阅读C++初级读物,我发现了以下两种说法:

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

但是,当我运行以下代码时,我不会收到错误或警告,而且我的代码运行良好:

代码语言:javascript
复制
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;
}

输出:

代码语言:javascript
复制
The address of ri is 0x7fff5fbff76
The address of bi is 0x7fff5fbff76c
0x7fff5fbff76c

知道为什么会这样吗?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-02-09 05:27:29

他们的意思是你不能有一个int& &类型。

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

当您执行int &bi = ri;时,您不是在引用引用,而是再次引用同一个对象。

票数 0
EN

Stack Overflow用户

发布于 2017-02-09 05:33:31

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

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

int &bi = &ri;

但这段代码会产生错误。

因此,您的代码正在工作,因为您已经创建了变量,所有这些变量都保存变量i的地址。

票数 0
EN

Stack Overflow用户

发布于 2017-02-09 12:07:10

int &bi = ri;

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

int* p= &ri;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42128707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档