avatar
关于C++ STL编译的疑问# Programming - 葵花宝典
i*h
1
突然想到这个(也许是个很蠢的问题,砖头轻拍)
下面的程序:
class myClassA {...}
vector a;
myClassA是我自己定义的一个类, compile时应该单独生成vector这个特例,
那么编译时要有template vector的 definition, 而不仅仅是 declaration,
对吧?
也就是说, 光有library提供的header file interface是不够的?
糊涂了
avatar
a*a
2
一般来说,模板类的完全定义都在header里,
只不过有些写在类的声明里,有些写在外面。但都在一个文件里。

例,
declaration,

【在 i***h 的大作中提到】
: 突然想到这个(也许是个很蠢的问题,砖头轻拍)
: 下面的程序:
: class myClassA {...}
: vector a;
: myClassA是我自己定义的一个类, compile时应该单独生成vector这个特例,
: 那么编译时要有template vector的 definition, 而不仅仅是 declaration,
: 对吧?
: 也就是说, 光有library提供的header file interface是不够的?
: 糊涂了

avatar
P*e
3
你include "vector"的时候,就已经include 了definition了

例,
declaration,

【在 i***h 的大作中提到】
: 突然想到这个(也许是个很蠢的问题,砖头轻拍)
: 下面的程序:
: class myClassA {...}
: vector a;
: myClassA是我自己定义的一个类, compile时应该单独生成vector这个特例,
: 那么编译时要有template vector的 definition, 而不仅仅是 declaration,
: 对吧?
: 也就是说, 光有library提供的header file interface是不够的?
: 糊涂了

avatar
i*h
4
那么是不是implementation里保证只有 T 的指针或reference?
否则每次连implementation也要重编译
avatar
a*a
5
如果你改了T的定义,vector当然就变了。这当然要重新编译。C++的编译是挺耗时间
的。

【在 i***h 的大作中提到】
: 那么是不是implementation里保证只有 T 的指针或reference?
: 否则每次连implementation也要重编译

avatar
P*e
6

object

【在 i***h 的大作中提到】
: 那么是不是implementation里保证只有 T 的指针或reference?
: 否则每次连implementation也要重编译

avatar
r*r
7
write a program junk.cpp with ONE line:
#include
and compile it with the -E option,
the output is what the real compiler sees:
g++ -E junk.cpp > tmp.cpp
in the file tmp.cpp, you'll see vector's declaration and definition,
it's about 2,000 lines.
avatar
i*h
8
nice. thanks very much.
I did just that and the tmp.cpp has 11712 lines!

【在 r*********r 的大作中提到】
: write a program junk.cpp with ONE line:
: #include
: and compile it with the -E option,
: the output is what the real compiler sees:
: g++ -E junk.cpp > tmp.cpp
: in the file tmp.cpp, you'll see vector's declaration and definition,
: it's about 2,000 lines.

avatar
r*r
9
a lot of them are declaration for the standard C library and
system calls. also, the STL algorithm functions will be included too.
that's why compiling c++ is so much slower than compiling c.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。