gpt4 book ai didi

c++ - 在Clang中生成默认构造函数

转载 作者:行者123 更新时间:2023-12-02 10:38:58 26 4
gpt4 key购买 nike

我正在尝试使用插件从Clang中提取AST,我想获取默认构造函数的“源代码”。例如,在我的源代码中,我有:

class T { public: T() = default; }

在Clang AST中,构造函数对象的 getBody()成员返回 null。是否有某种方式可以将默认实现作为 Stmt进行获取?在这种情况下,它将返回 {},但在一般情况下,它将涉及调用父级构造函数等。

一个简单的示例,在文件中编写以下内容:
class P { }
int main() {
// P x;
return 0;
}

该文件不会生成任何构造函数代码(您可以使用( clang++ -Xclang -ast-dump -fsyntax-only test-ctor.cpp)转储AST,但是如果取消注释 P x行,则同一命令将生成默认的构造函数:
| CXXConstructorDecl 0x562bdb879eb0 <line:5:5, col:17> col:5 used P 'void () noexcept' default trivial
| `-CompoundStmt 0x562bdb87a570 <col:17>

谢谢!

最佳答案

基于this post和C++ 11,

A default constructor that is defaulted and not defined as deleted is implicitly defined when it is odr-used (3.2) to create an object of its class type (1.8) or when it is explicitly defaulted after its first declaration.



因此,当 P x在代码中时,存在一个CXXConstructorDecl节点,即创建对象 x的类类型为 P

关于c++ - 在Clang中生成默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54029992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com