考虑以下文件
foo.h中
class Foo
{
Foo();
Foo(int x);
void bar();
}
foo.cc
# include foo.h
Foo::Foo() {}
Foo::Foo(int x) {}
void Foo::bar() {}
将这些文件编译为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
- 编辑 -
根据下面的 milleniumbug 的评论,here是有关完整对象构造函数的一些其他信息: