Boost Chrono Documentation说,可以将chrono库用作仅标头库。我看不到任何提及将其用作仅标头库的限制的信息。除了不需要链接到boost_chrono的明显区别外,当我定义BOOST_CHRONO_HEADER_ONLY宏时会有什么变化?
使用chrono_io功能库很有趣。我宁愿使用仅标头的版本,但想知道这样做会造成的损失。如果没有任何区别,为什么存在链接版本?
#define BOOST_CHRONO_VERSION 2
#include <boost/chrono.hpp>
#include <boost/chrono/chrono_io.hpp>
int main(int argc, char **argv)
{
const auto now = boost::chrono::system_clock::now();
std::cout << "It is now "
<< boost::chrono::time_fmt(boost::chrono::timezone::local)
<< now << "\n";
}
编译为
g++ -std=c++11 -o chronoLinked main.cpp -lboost_system -lboost_chrono
g++ -std=c++11 -o chrono main.cpp -lboost_system -D BOOST_CHRONO_HEADER_ONLY
运行两个命令都会在当前时间产生相同的输出。
答案 0 :(得分:1)
如果没有记载的差异,您可以确信没有差异。
当然,技术上的区别是二进制文件会更大(包含所有必需的定义,否则共享库中就会存在)。
对于其他库(例如Boost System),选择仅标头的变体 会影响程序,例如链接到也使用Boost System的其他库。区别在于全局变量在动态链接方案中共享时将被复制。一个明显的例子就是错误类别。
如果要保持警惕,请查找需要共享(而不是重复)的(静态)全局数据。我没有立即了解Boost Chrono中的此类数据。