为什么 const 引用可以指向常量还可以取到地址?

2018-09-24 00:09:59 +08:00
 ngg0707
#include <iostream>
using namespace std;

int main(int argc, char const* argv[])
{
    const int& a = 1;
    cout << &a << endl;
    return 0;
}

不知道该怎么搜索这个问题,没查到。有人知道吗?

5584 次点击
所在节点    C
44 条回复
wizardforcel
2018-09-24 10:29:33 +08:00
@jmc891205 `a + 1` 也是临时变量,但它没有地址。
pagict
2018-09-24 15:04:00 +08:00
@snnn 单这个例子的代码是没啥好探讨的垃圾代码,但以此可以摸索编译器的内在原理,也不失为一种有意义的讨论
wizardforcel
2018-09-24 15:29:15 +08:00
#20 #21 原来是 const& 啊,我看错了。。。
sfqtsh
2018-09-24 15:54:13 +08:00
右值引用和 const 左值引用都可以指向一个左值。引用本身是右值,而右值可以被取地址。
kingcc
2018-09-24 19:08:26 +08:00
学习到了
agagega
2018-09-24 20:09:44 +08:00
特殊操作
onemoo
2018-09-24 21:00:25 +08:00
只从语法角度考虑这个问题:
你知道等号右侧的字面量 1 是右值。你也知道“ const 引用”是可以引用右值的。

@sfqtsh 但是“取地址&运算符”的操作数需要是左值。

记得 C++ 中有这样一条规则“具名引用为左值”。所以即便这个 a 是右值引用(&&),a 也被视为左值表达式,可以对其应用 & 运算符。
ngg0707
2018-09-24 21:01:01 +08:00
@mintist 应聘做题做到这个,就想了解一下……
sfqtsh
2018-09-24 21:36:44 +08:00
@onemoo 衰,,,写错了。应该是:

"右值引用和 const 左值引用都可以指向一个右值。引用本身是左值,而左值可以被取地址。"
iceheart
2018-09-24 22:06:28 +08:00
都引用了,咋能没有地址呢?
SKull4
2018-09-24 22:27:24 +08:00
@ngg0707 应聘的 iOS 开发么。。。
dangyuluo
2018-09-25 01:46:24 +08:00
@anonymous256 大哥你是认真的么。。一本正经的胡说八道
dangyuluo
2018-09-25 01:49:20 +08:00
xuanbg
2018-09-25 06:26:42 +08:00
变量怎么能没有地址?
innoink
2018-09-25 07:47:51 +08:00
@xuanbg int a = 2; int& b = a; 那么&b 是 a 的地址还是 b 的地址?
xuanbg
2018-09-25 08:50:28 +08:00
@innoink &b 是变量 b 的指针,也就是变量 b 在栈上的地址,b 才是指向 a 的地址
wutiantong
2018-09-25 10:16:50 +08:00
liuminghao233
2018-09-25 13:30:11 +08:00
@xuanbg
int a = 2;
int& b = a;
这样的话
&a == &b
innoink
2018-09-25 14:00:46 +08:00
@xuanbg 你错了,int&b = a;在这一刻以后 b 和 a 完全等价,包括&b 其实就是&a,所以楼主才有"如何对字面量取地址"的疑问。
innoink
2018-09-25 14:01:49 +08:00
@xuanbg 我估计你搞混了引用类型和指针类型。你无法对一个引用类型的变量取地址。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/492033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX