MoreEffectiveC++之考虑变更程序库

MoreEffectiveC++之考虑变更程序库,第1张

MoreEffectiveC++之考虑变更程序库,第2张

图书馆的设计是一个折衷的过程。理想的库应该简短、快速、强大、灵活、可扩展、直观、普遍适用、得到很好的支持、没有使用限制和错误。这个也不存在。针对大小和速度优化的库一般不能移植。一个有大量函数的库不会很直观。没有错库会被限制使用范围。在现实世界中,你不可能拥有一切,你必须付出。

不同的设计者对这些条件给予不同的优先权。所以他们在设计中牺牲了不同的东西。因此,通常,提供相同功能的两个库具有完全不同的性能特征。

例如,考虑iostream和stdio库,这两个库都可以被C++程序员使用。与C中的stdio相比,iostream库有几个优点(见有效C++)。例如,它是类型安全的,并且是可扩展的。但从效率上来说,iostream库始终不如stdio,因为stdio生成的执行文件比iostream生成的文件体积更小,执行速度更快。

首先考虑执行速度。要掌握iostream和stdio之间的性能差异,一种方法是使用这两个库来运行基准程序。但是你要记住,基准也可以撒谎。不仅很难拿出一组能代表一个程序或库的典型用法的数据,而且即使拿出来也没用,除非有可靠的方法来判断你或你的客户有什么特征。但是,benchmark仍然可以提供一些关于解决一个问题的不同方法的比较的信息,所以尽管完全依赖benchmark是愚蠢的,但是忽略它们也是愚蠢的。

让我们测试一个简单的基准程序,只测试最基本的I/O功能。这个程序从标准输入中读取30,000个浮点数,然后以固定格式写入标准输出。编译时,预处理符号stdio决定使用STDIO还是iostream。如果定义了此符号,则使用stdio,否则使用iostream库。

# ifdef STDIO
# include
# else
# include
# include
使用命名空间std
#endif

const int VALUES = 30000; // # of values to read/write
int main()
{
 double d;
 for (int n = 1; n   #ifdef STDIO
   scanf("%lf", &d);
   printf("%10.5f", d);
  #else
   cin >> d;
   cout

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » MoreEffectiveC++之考虑变更程序库

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情