QT创建者和奇怪的代码完成使用智能指针

QT Creator and strange code completion using smart pointer

本文关键字:智能 指针 代码 创建者 QT      更新时间:2023-10-16

我使用的是qtcreator(2.8.1),使用智能指针有一些奇怪的行为。

看看这个片段:

class myclass {
public:
  void test() {};
};
....
std::shared_ptr<myclass> foo(new myclass);
foo->test();
std::unique_ptr<myclass> bar(new myclass);
bar->test();

如果我键入"foo->",代码完成窗口弹出,但如果我键入"bar->",则不会发生任何事情。

为什么代码完成只适用于shared_ptrs而不适用于unique_ptrs?

更新:我使用的QT Creator带有CMake和add_definitions(-std=c++11),这一点可能很重要。

这是一个错误。

在未来的某个时候,QtCreator可能会开始使用真正的编译器前端(可能clang,这对于这种用途来说非常好)来进行C++解析,以实现自动补全和语法高亮显示,但2.8.1有自己不完善的C++解析器。C++拥有完整的模板和预处理器宏,以及几十年来积累的遗留crud,解析起来非常复杂(因此,如果你完全解析的话,解析速度会很慢),所以如果不是由真正符合标准的编译器进行解析,那么像这样的错误也就不足为奇了。