赞
踩
本节书摘来自华章计算机《高性能科学与工程计算》一书中的第2章,第2.5节,作者:(德)Georg Hager Gerhard Wellein 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
目前,有大量关于如何编写高效C++代码的文献[C92,C93, C94, C95]。我们的目标不是取代它们。所以我们特意忽略了引用计数、写时复制、智能指针等关键技术。本节以循环代码为例,根据我们的经验指出C++编程中经常存在的性能错误和误解。
C++编程存在着一个根深蒂固的假象:编译器应该能够识别高级C++程序包含的所有抽象和代码混淆。首先,C++是一门支持复杂管理的高级编程语言,且自身特征明显(如运算符重载、面向对象、自动构建/销毁等)。然而,这些特征绝大多数都不适合编写高效的低层次代码。
2.5.1 临时变量
C++具有一个“隐式”的编程风格:自动机制为程序员隐藏了C++编程的复杂性。然而,在表达式含有运算符重载链时,经常会出现一个问题。例如,假设有一个表示三维向量的类vec3d,该类实现了算术运算符重载以支持更有表现力的编码:
在代码第7行,const T& vector::operator[]被调用了两次,分别获得向量a和b的相应分量。STL定义这个操作的方式如下(改编自GNU ISO C++库代码):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。