Исходный ответ (неверный)
AST - это дерево, и у каждого узла ровно один родительский элемент. getParents
, однако, возвращает не только родителя, но и родителя родителя и так далее. Таким образом, на самом деле, функцию лучше называть как-то как getAncestors
.
Обновленный ответ
Исходный ответ действительно неверен и getParents
возвращает ровно один узел для подавляющего большинства Узлы АСТ. Вот комментарий от clang-tidy
, который охватывает топи c:
Случай, когда у Stmt есть несколько родителей, встречается редко, но на самом деле происходит в интересующих нас частях AST В частности, узлы InitListExpr заставляют ASTContext :: getParent () возвращать несколько родителей для определенных узлов в их поддереве, потому что RecursiveASTVisitor посещает как syntacti c, так и semanti c формы InitListExpr, и отношения родитель-потомок различаются между две формы.
Возможно, есть и другие узлы, но я не смог найти информацию об этом.