2015-09-23 13 views
5

Khi biên soạn, đây:Quá nhiều ký tự constructor

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>; 

mang lại cho tôi (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*) 

tôi dường như để có được ba biểu tượng (2 W + 1 n (không biết những gì nghĩa là)) cho mỗi hàm tạo mà tôi xác định. Chức năng dường như cho tôi một cái như mong đợi. Ai đó có thể giải thích tại sao điều này hoặc chỉ cho tôi một lời giải thích?

+7

Có vẻ như có liên quan: http://stackoverflow.com/questions/6921295/dual-emission-of-constructor-symbols – Michael

+0

yepp, chỉ cần tìm thấy https://www.google.com/search?q=multiple+constructors + tạo ra và có một câu trả lời tuyệt vời ở đâu đó, tôi chỉ không biết những từ tìm kiếm để sử dụng. –

+0

@Michael Cảm ơn rất nhiều. Câu hỏi này trùng lặp với biểu tượng n không giải thích được. – PSkocik

Trả lời

0

Có lẽ tôi có thể thấy lý do tại sao biểu tượng này xuất hiện trong đầu ra nm, nhưng tôi không thể biết liệu nó có nên ở đó hay không và chính xác nghĩa là gì n. Có lẽ nếu ai đó quen thuộc với điều này, anh ấy có thể đăng câu trả lời đầy đủ.

Nếu bạn thực hiện objdump -t ./obj.o bạn có thể thấy bảng biểu tượng. Ngoại trừ 2 nhà thầu và nhiều biểu tượng khác tôi thấy

00000000 l  .group 00000000 _ZN10ConstArrayIKcEC5EPS0_S2_ 

tại đó. Lá cờ chỉ là l có nghĩa là địa phương và không gỡ lỗi, vì vậy tôi thấy nó trong nm đầu ra làm biểu tượng thứ ba.

Nếu tôi làm nm -g ./obj.o để xem những biểu tượng chỉ extern, tôi thấy chỉ có 2 W nhà thầu và khi tôi làm nm -a ./obj.o Tôi thấy tất cả các biểu tượng và cũng đánh dấu trong objdump -x như debug. Và tôi cũng thấy có một số biểu tượng gỡ lỗi được n -flagged trong nm -a đầu ra.

Vì vậy, tôi không biết những gì n có nghĩa là, nhưng biểu tượng thứ ba là bằng cách nào đó liên quan đến .group phần của elf tệp. Đó là trách nhiệm cho các nhóm ký hiệu với nhau.

Các vấn đề liên quan