c++ - 为什么CImg可以达到这样的效果呢?

标签 c++ cimg

The compilation is done on the fly : only CImg functionalities really used by your program are compiled and appear in the compiled executable program. This leads to very compact code, without any unused stuffs.

谁知道原理?

最佳答案

CImg 是一个只有头文件的库,他们自由地使用模板,这就是他们所指的。

如果他们使用某种预编译库 (.dll/.lib/.a/.so),则库文件必须包含整个 CImg 库,而不管它的哪一部分你实际使用。

在静态链接库(.lib 或 .a)的情况下,链接器可以然后去除未使用的符号,但这可能取决于优化设置。

当整个库包含在一个或两个头文件中时,它只会在您#include 时才真正编译,因此它与程序的其余部分属于同一编译过程的一部分,并且编译器可以很容易地确定库的哪些部分被使用,哪些不被使用。

并且由于 CImg API 使用模板,因此不会为从未调用的函数生成任何代码。

虽然他们有点夸大其词,因为正如其他答案所指出的,未使用的符号通常会被删除无论如何

关于c++ - 为什么CImg可以达到这样的效果呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274781/

相关文章:

c++ - regex_replace 在 cin 期间不工作

c++ - fork n 个 child 并向他们发送一个单词

CImg 如何从给定的 x,y 坐标绘制多边形?

c++ - 从透视图到正交图

html - CSS : : 试图让部分/div 的高度匹配....一个没有 img

c++ - 可移植的 C++ 组件设计

c++ - 在 Cygwin 上将 GCC 更新到 v5.4.0。 cmath 产生错误

c++ - 添加新对象时销毁 vector 中的对象

c++ - 使用 cimg C++ 进行图像处理

c++ - 使用 CImg : LNK1181: cannot open file "m.lib" on windows 7 x64