【发布时间】:2010-11-11 22:41:26
【问题描述】:
假设以下玩具类和现代编译器(例如最近的 gcc)。
template <typename T>
class SomeVec {
public:
...
virtual T get(const int index) = 0;
}
该应用程序涉及基于存储在 SomeVec 子类中的值的大量数字运算,T 是原始类型,例如 int。但是stl containers 和boost::numeric::ublas::vector 的做法是通过(const) reference 返回存储的值。
我想知道这涉及的性能差异。在this question 中显示,按值访问数组元素和按引用访问向量元素会产生相同的代码,因此我假设编译器在某些情况下可以优化东西。
现在我的问题是:
(1)
stl和ublas是模板化的,而我的解决方案需要虚拟方法。这会阻碍现代编译器优化代码的能力吗?(2) 如果编译器无法优化以将 const 原子引用作为值返回,那么我是否认为虚拟方法调用和取消引用成本大致相同是正确的?还是一个比另一个贵很多?
谢谢!
【问题讨论】:
-
你这里有一个纯虚方法,意味着你有派生类。你能举个例子吗?
-
@Oli:子类可以是多种多样的,但例如一个简单的实现将有一个内部向量或映射并返回一个存储的值。当然,这比返回类型所带来的开销要多得多,但我们不要考虑这一点。
标签: c++ optimization reference return-type