为什么CImg能达到这种效果?

use*_*729 2 c++ cimg

编译是即时完成的:只有程序真正使用的CImg功能才会被编译并出现在已编译的可执行程序中.这导致代码非常紧凑,没有任何未使用的东西.

谁知道原理?

jal*_*alf 6

CImg是一个仅限标题的库,它们使用模板,这是他们所指的.

如果他们使用某种类型的预编译库(.dll/.lib/.a/.so),则库文件必须包含整个 CImg库,无论您实际使用哪个库.

对于静态链接库(.lib或.a),链接器可以删除未使用的符号,但这可能取决于优化设置.

当整个库包含在一个或两个头文件中时,它实际上只是在编译时编译#include,因此它是与程序其余部分相同的编译过程的一部分,并且编译器可以轻松确定库的哪些部分是使用过,哪些不是.

并且因为CImg API使用模板,所以不会为从未调用过的函数生成代码.

他们有点过头,虽然它,因为其他的答案指出,未使用的符号通常会被剥离出来.