readability-reference-to-constructed-temporary

检测 C++ 代码中使用引用变量来延长刚构造的临时对象的生存期的场景。

这种构造通常是多次代码重构或开发人员缺乏知识的结果,会导致混淆或细微的错误。在大多数情况下,开发人员真正想做的是创建一个新变量,而不是延长临时对象的生存期。

有问题的代码示例包括

const std::string& str("hello");

struct Point { int x; int y; };
const Point& p = { 1, 2 };

在第一个示例中,一个 const std::string& 引用变量 str 被分配了一个由 std::string("hello") 构造函数创建的临时对象。在第二个示例中,一个 const Point& 引用变量 p 被分配了一个由初始化列表 { 1, 2 } 构造的对象。这两个示例都将临时对象的生存期延长到了引用变量的生存期,这使得难以推理,并可能导致细微的错误或误解。

为了避免这些问题,建议将引用变量更改为(const)值变量。