C++ 为什么 Const& 可以获取 const 值?
c++ why const& can get const values?
我明白为什么int& x=1
是非法的(你不能引用恒定值),但我不明白为什么const int& x=1
是合法的?你怎么能提到数字"1"呢?它甚至不是一个已定义的变量
编辑:我读了这篇文章中给出的答案:当我在c++中为const引用分配临时int时会发生什么?但是有人能解释一下他的意思是"表达式f(1)返回的临时值的生命周期将被延长。"该规则对于const引用是唯一的。那么字面量是作为int存储在堆栈上还是不存储?谢谢!
(不能引用常量值)
你差点就成功了。
不能使用非常量引用常量值。
可以使用常量引用常量值。(它将所述值的生命周期扩展到该引用的生命周期)。
允许使用const引用的第二种情况,因为这样创建了一个int
类型的临时对象,并且引用指向这个临时对象。
在这种情况下,您有一个常量引用到一个常量值,这意味着创建一个临时变量的整个生命周期都绑定到引用的生命周期。
这是c++语言的一个特性。点击这里查看简单的解释
编辑
从链接:
一般来说,一个临时对象只持续到满的结束它出现时的表情然而,c++故意指定将临时对象绑定到栈上const的引用将临时对象的生命周期延长为引用本身,从而避免了公共的悬摆指针错误
因为c++是这么说的。语言是这样定义的。语言的创造者决定允许它
相关文章:
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 为什么相同的函数签名只有区别,另一个通过 const 获取参数是重新定义?
- 延长函数的寿命延长 由 const& 获取参数并由 const& 返回
- 从本机代码返回"const char*"并在java中获取"字符串"
- 使用const_cast const-ref getter 实现引用获取器的陷阱
- 转换为std :: string并在一行中获取const char *
- 无序地图 - 使用const键获取值
- 获取const lvalue参考的地址是合法的吗?
- 使用 Visual Studio 2013 直接从 std::ostringstream 获取 const char *
- 如何从"const int i"获取i的真实地址
- 如何在不复制或查找的情况下获取 const 字符串流缓冲区的长度?
- 如何在cocos2dx中获取静态const int三维数组长度
- 如何获取对象的const引用并使用该引用更改对象(使用const_cast)
- 如何获取boost::any保存的数据的const引用
- 如何使用用户定义的对象从priority_queue中获取非const顶级元素
- 获取模板类型的基类型(移除const/reference等)
- C++ 为什么 Const& 可以获取 const 值?
- 通过指针获取修饰char*和char const*:很好的实践
- 获取对字符串的子字符串的const访问
- 基于范围的循环:通过值或对const的引用获取项