c++ - 这个 C++ 引用初始化合法吗?

标签 c++ variables reference constants

我目前正在阅读 C++ Primer,在其中一个练习中,它显示了两种类型的引用初始化,一种是 const 和一种不是,在一种 const 中,引用指向 0..我认为引用只能指向对象!!

   int i = -1, &r = 0;         // illegal, r must refer to an object.

   const int i = -1, &r = 0;   // legal.

所以第一个,int变量i是-1。然后 int reference r 指的是 0 这是 无效,问题

现在在第二个中,const int i = -1,然后是 const reference r = 0.. 怎么样?

我知道引用不能是 const,const 是引用所指的内容,书上说 const 引用可以引用 const 和非 const 对象(同一类型)。这仍然没有解释为什么它可以指向 0,这根本不是一个对象..

我不确定第二个陈述如何有效,请有人解释!

最佳答案

const int &r = 0;

创建一个值为 0 的临时对象,然后将 r 绑定(bind)到该对象。这是允许的,因为允许 const 引用绑定(bind)到右值。它也适用于右值引用:

int&& r = 0;  // ok

但是,它不适用于 int&,因为 int& 变量只能绑定(bind)到左值。

请注意,引用绑定(bind)到的临时对象将一直存在,直到引用超出范围。参见 https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/

关于c++ - 这个 C++ 引用初始化合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493005/

相关文章:

generics - 通用类型引用的 Rust 约束

c - int (*ar) [] 声明在 C 中是什么意思?

objective-c - 如何从c函数获取数据到cocoa(objective c)函数

python - 为什么执行函数后instances变量没有丢失?

c++ - 为什么在成员函数中返回对 ostream 对象的引用以进行序列化

c++ - 使用多个参数包将运行时值转换为编译模板参数

c++ - 如何存储从 std::bind 返回的可调用对象以获取指向成员函数的指针?

c++ - 使用 C++ 抛硬币的嵌套循环

c++ - 为什么结构体的 sizeof 不等于每个成员的 sizeof 之和?

java - java中如何指向对象?