使用新的Xcode 7.0 GM(Apple LLVM 7.0版),clang静态分析器将以下代码标记为"称为C ++对象指针未初始化"。
auto&& x = T();
x.hello(); // issue at this point
但是,我非常确定右值引用x
会延长T()
构建的临时值的生命周期,因此标记行的x
肯定仍然存在。我可以在运行时通过让构造函数和析构函数记录它们的调用来确认这一点。
此外,如果我替换const auto& x = T();
,问题也会消失。我会自己做,但确切的问题是范围换循环,所以我不能改变参考的性质。
分析仪是否过热了?
请参阅参考初始化规则:http://en.cppreference.com/w/cpp/language/reference_initialization