c++ - 在 C++ 中,如果 "int a = 3; int* p = &a;",那么为什么 "const int* &pp = p"是不允许的,而 "const int* const &pp = p"是允许的?

标签 c++ c++11 reference constants

在 C++ 中,如果:

int a = 3; 
int* p = &a; 

那是为什么

const int* &pp = p; 

不允许,但是

const int* const &pp = p; 

允许吗?

最佳答案

给定 const int* &pp = p;p 首先必须隐式转换为 const int*。但是转换后的 const int* 是临时的,不能绑定(bind)到非 const 的左值引用(如 const int* &)。

Temporary 可以绑定(bind)到对 const 的左值引用(如 const int* const &)(和右值引用),所以 const int* const &pp = p; 工作正常。并且临时对象的生命周期延长到引用 pp 的生命周期。

关于c++ - 在 C++ 中,如果 "int a = 3; int* p = &a;",那么为什么 "const int* &pp = p"是不允许的,而 "const int* const &pp = p"是允许的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52250569/

相关文章:

c++ - 二年级搬家

c++ - std::function 的工作原理

c++ - C++ 链接器是否从模板和内联函数中删除代码重复?

c++ - Visual Studio 2012 中的 round()、rint()(等等)C++ 函数在哪里?

java - 为什么Java的HashMap对于不同的对象有不同的行为?

c++ - && 对 C++ 中的参数类型意味着什么?

javascript - 在 JavaScript 中引用具有数值的对象属性

c++ - 从文件读取时获取垃圾字符

c++ - lambda 函数中的变量显示垃圾值

c++ - 如果字符串 vector 包含 char 'p',我如何检查 C++