别名方法和性能问题
Alias Methods and Performance Concerns
为了提高代码的可读性,有时我使用"别名方法"。这些基本上都是做同样事情的方法(至少在基类中;派生类可以使用不同的名称,根据上下文增强类用户的代码可读性。考虑下面的示例代码:
template <typename T>
class Foo {
public:
T bar() { /* Lots of stuff here */ }
inline T bar_alias1() { return this->bar(); }
inline T bar_alias2() { return this->bar(); }
};
当然,如果Foo::bar()
是一个小函数,只需在所有别名方法中复制代码即可。但是,由于代码可能相对较大,因此应该避免代码重复,因此别名方法被声明为内联方法。但是我知道编译器不能保证任何声明为inline
的函数在编译时实际上会被扩展。
Foo<BIG_OBJECT> foo;
BIG_OBJECT bo1 = foo.bar();
BIG_OBJECT bo2 = foo.bar_alias1();
如果传递的对象比较大,调用foo.bar()
会比调用foo.bar_alias1()
快吗?当Foo::bar_alias1()
调用Foo::bar()
时,是否存在对象的冗余副本?
我使用Visual Studio 2010作为我的编译器
假设别名函数是内联的-并且它们应该给定大小。不应该有任何性能开销。如果编译器决定省略函数代码并内联所有对它的调用,代码大小也不会增加。
(我指的是bar_alias1()
的内联,如果bar()
本身很大,则不一定内联)
但是,如果函数是虚函数,则不适用。
在C中,我会更直接地使用预处理器,但我不确定这在c++中是否合适。
相关文章:
- 在类中使用随机生成器时出现性能问题
- Qt OpenGL 渲染到纹理性能问题
- 剪辑性能问题
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- OpenCV - 基本操作 - 性能问题 [模式:发布]
- 使用 #define 进行跟踪日志记录以避免性能问题
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- std::函数有性能问题,如何避免?
- 使用 const double* const 作为模板参数 - 代码性能问题
- 在C 中读取大型CSV文件性能问题
- MPI 二进制文件 I/O 基本功能和性能问题
- 如何修复macOS线程互斥锁性能缓慢的问题?
- 使用STD :: MAP在数据及其性能问题中查找重复项.我可以预先分配吗?
- C 功能性能问题
- 一维数组映射方式的性能差异问题
- 在C 性能问题中使用Getter返回地图
- 初始化每个班级成员时的性能问题
- 事件(开始,结束),1天的最大事件.C++ 中的性能问题
- 在X64模式下从C /CLI调用MASM PROC会产生意外的性能问题
- OpenGL:MESA3D屏幕上的软件渲染性能问题