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
)值变量。