请考虑以下文件
foo.h中
class Foo
{
Foo();
Foo(int x);
void bar();
}
Run Code Online (Sandbox Code Playgroud)
foo.cc
# include foo.h
Foo::Foo() {}
Foo::Foo(int x) {}
void Foo::bar() {}
Run Code Online (Sandbox Code Playgroud)
将这些文件编译为LLVM bitcode时foo.bc,如下所示
clang++ -c -o foo.bc -emit-llvm foo.cc
生成的LLVM bitcode文件,foo.bc每个构造函数定义包含两个符号,但函数定义只包含一个符号.为什么是这样?
我已经在LLVM版本3.4和4.0.1上测试了这个,并且两个版本都会出现这种情况.供参考,这是输出
llvm-nm foo.bc
T _ZN3Foo3barEv
T _ZN3FooC1Ei
T _ZN3FooC1Ev
T _ZN3FooC2Ei
T _ZN3FooC2Ev
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
根据下面的milleniumbug评论,这里有一些关于完整对象构造函数的附加信息: