О clang AST и odr-использовании деструкторов ⇐ C++
О clang AST и odr-использовании деструкторов
Для следующего кода
struct X { интервал а; }; интервал основной() { Х х; вернуть 0; } CLang AST не отображает DestructorDecl:
CXXRecordDecl 0x55a415f54f00 line:1:8 ссылается на определение структуры X |-DefinitionData pass_in_registers агрегирует стандартный_макет тривиально_копируемый тривиальный литерал модуля | |-DefaultConstructor существует тривиально | |-CopyConstructor простой тривиальный has_const_param implicit_has_const_param | |-MoveConstructor существует простой и тривиальный | |-CopyAssignment простой тривиальный has_const_param нужен_имплицит неявный_has_const_param | |-MoveAssignment существует простые тривиальные потребности_имплицит | `-Деструктор простой нерелевантный тривиальный нужен_имплицит |-CXXRecordDecl 0x55a415f55018 col:8 неявная структура X |-FieldDecl 0x55a415f550c0 столбец:7 a 'int' |-CXXConstructorDecl 0x55a415f55320 col:8 неявно используется X 'void () noException' встроенный по умолчанию тривиальный | `-CompoundStmt 0x55a415f557d8 |-CXXConstructorDecl 0x55a415f55458 col:8 неявный constexpr X 'void (const X &)' встроенный по умолчанию тривиальный noException-unevaluated 0x55a415f55458 | `-ParmVarDecl 0x55a415f55568 col:8 'const X &' `-CXXConstructorDecl 0x55a415f55618 col:8 неявный constexpr X 'void (X &&)' встроенный по умолчанию тривиальный noException-unevaluated 0x55a415f55618 `-ParmVarDecl 0x55a415f55728 col:8 'X &&' Я пытался получить CXXRecordDecl из struct X и обнаружил, что decl->getDestructor() возвращает nullptr >.
Это меня немного смущает, поскольку стандарт гласит, что класс без деструктора, объявленного пользователем, будет иметь деструктор, объявленный неявно, и он будет неявно определен при использовании odr. > Так что же такое деструктор, используемый odr? Используется ли деструктор этого X odr? Или это просто мое непонимание clang AST и поведения clang::CXXRecordDecl::getDestructor?
Обратите внимание, что clang-AST, напротив, показывает, что конструктор по умолчанию X определен, хотя он ничего не делает.
Для следующего кода
struct X { интервал а; }; интервал основной() { Х х; вернуть 0; } CLang AST не отображает DestructorDecl:
CXXRecordDecl 0x55a415f54f00 line:1:8 ссылается на определение структуры X |-DefinitionData pass_in_registers агрегирует стандартный_макет тривиально_копируемый тривиальный литерал модуля | |-DefaultConstructor существует тривиально | |-CopyConstructor простой тривиальный has_const_param implicit_has_const_param | |-MoveConstructor существует простой и тривиальный | |-CopyAssignment простой тривиальный has_const_param нужен_имплицит неявный_has_const_param | |-MoveAssignment существует простые тривиальные потребности_имплицит | `-Деструктор простой нерелевантный тривиальный нужен_имплицит |-CXXRecordDecl 0x55a415f55018 col:8 неявная структура X |-FieldDecl 0x55a415f550c0 столбец:7 a 'int' |-CXXConstructorDecl 0x55a415f55320 col:8 неявно используется X 'void () noException' встроенный по умолчанию тривиальный | `-CompoundStmt 0x55a415f557d8 |-CXXConstructorDecl 0x55a415f55458 col:8 неявный constexpr X 'void (const X &)' встроенный по умолчанию тривиальный noException-unevaluated 0x55a415f55458 | `-ParmVarDecl 0x55a415f55568 col:8 'const X &' `-CXXConstructorDecl 0x55a415f55618 col:8 неявный constexpr X 'void (X &&)' встроенный по умолчанию тривиальный noException-unevaluated 0x55a415f55618 `-ParmVarDecl 0x55a415f55728 col:8 'X &&' Я пытался получить CXXRecordDecl из struct X и обнаружил, что decl->getDestructor() возвращает nullptr >.
Это меня немного смущает, поскольку стандарт гласит, что класс без деструктора, объявленного пользователем, будет иметь деструктор, объявленный неявно, и он будет неявно определен при использовании odr. > Так что же такое деструктор, используемый odr? Используется ли деструктор этого X odr? Или это просто мое непонимание clang AST и поведения clang::CXXRecordDecl::getDestructor?
Обратите внимание, что clang-AST, напротив, показывает, что конструктор по умолчанию X определен, хотя он ничего не делает.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
MacOS Clang Compiler выпуск (Apple Clang версия 17.0.0 (Clang-1700.0.13.5))))
Anonymous » » в форуме C++ - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-