MST

星途 面试题库

面试题:C++中const引用与临时对象的关系及原理

在C++中,当一个const引用绑定到一个临时对象时,会发生什么?请详细解释其背后的原理,并且说明如果是非const引用绑定临时对象会出现什么问题。
48.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

const引用绑定临时对象

  1. 发生的事情:当一个const引用绑定到一个临时对象时,临时对象的生命周期会被延长至const引用的生命周期结束。例如:
const int& ref = 10; // 10是临时对象,这里将其绑定到const引用ref
// 在ref的生命周期内,临时对象10会一直存在
  1. 背后原理:C++标准规定,当一个const左值引用绑定到一个临时对象时,临时对象的生存周期将被延长,直到引用被销毁。这是因为const引用承诺不会修改临时对象,所以编译器可以安全地延长其生命周期。这样做是为了避免悬空引用的问题,即引用指向一个已经被销毁的对象。

非const引用绑定临时对象

  1. 出现的问题:非const引用不能直接绑定到临时对象。如果尝试这样做,会导致编译错误。例如:
// int& ref = 10; // 编译错误,非const引用不能绑定到临时对象
  1. 原因:非const引用意味着可以修改所引用的对象。然而,临时对象是短暂存在的并且通常存储在临时存储区,允许非const引用绑定到它会导致对临时对象的修改,而临时对象在表达式结束后就会被销毁,这可能导致程序出现未定义行为,比如后续对已销毁对象的访问。所以编译器禁止这种操作以保证程序的安全性。