太多的构造函数符号

PSk*_*cik 5 c++

编译时,这个:

template <typename T>
struct ConstArray {
///MEMBERS
    T* data_;
    T* end_;

///Constructors
    ConstArray(T* data, T* end) : data_(data), end_(end) {}
};

template struct ConstArray<const char>;
Run Code Online (Sandbox Code Playgroud)

给我(nm -C *.o):

0000000000000000 W ConstArray<char const>::ConstArray(char const*, char const*)
0000000000000000 W ConstArray<char const>::ConstArray(char const*, char const*)
0000000000000000 n ConstArray<char const>::ConstArray(char const*, char const*)
Run Code Online (Sandbox Code Playgroud)

对于我定义的每个构造函数,我似乎得到三个符号(2 W + 1 n(不知道那是什么)).功能似乎只给我一个预期的.有人可以解释一下这是为什么或指出我的解释?

Jus*_*ous 0

也许我可以明白为什么这个符号出现在nm输出中,但我无法判断它是否应该/不应该在那里以及到底n意味着什么。也许如果有人熟悉这一点,他可以发布完整的答案。

如果你这样做,objdump -t ./obj.o你可以看到一个符号表。除了我看到的 2 个构造函数和许多其他符号

00000000 l       .group 00000000 _ZN10ConstArrayIKcEC5EPS0_S2_
Run Code Online (Sandbox Code Playgroud)

那里。该标志仅l意味着它是本地的而不是调试的,所以我在nm输出中将其视为第三个符号。

如果我nm -g ./obj.o只看到外部符号,我只能看到 2 个W构造函数,当我看到时,nm -a ./obj.o我会看到所有符号并且也标记为objdump -xas debug。我还看到输出n中有一些带有 - 标记的调试符号nm -a

所以我不知道是什么意思,但第三个符号在某种程度上与文件部分n相关。它负责将符号分组在一起。.groupelf