【发布时间】:2012-10-15 13:38:31
【问题描述】:
我正在编写一个科学计算程序,我最感兴趣的(在正确性之后)是速度。最近我注意到我也需要可读的代码。 :)
而不是写
for (int k=0;k!=10;k+=1)
array[k] = fun(a, k);
我正在考虑写作
class fun_t {
private:
type a;
public:
fun_t(type in) : a(in) {};
type operator() (int k) {
...computation...
}
};
...
fun_t fun(a);
for (int k=0;k!=10;k+=1)
array[k] = fun(k);
函数对象样式会和第一个例子一样快吗?我可以期望两者都有相同的内联吗?有没有更好的方法? (请注意,我只是在这里提出想法,这不是我的实际代码。)
【问题讨论】:
-
从C++11开始,语言中有匿名函数(
lambda)。 -
最好的发现方法是分析。
-
@PlasmaHH:你的意思是我应该编写两个版本的程序吗?我不能要求编译器验证内联正在发生吗?
-
@Mankka:lambda 简单地编译成函子(函数对象),而函子对于编译器内联来说是微不足道的。所以它应该基本上是免费的(就像你在问题中概述的版本一样)。但一如既往,如果性能很重要,不要相信互联网上的随机人,在你的代码中衡量它
-
我很欣赏这只是一个例子,但你提到你想要可读的代码,但是你已经从两行(对我来说非常易读)变成了 10 行,实际上包括(实际上)你原来的两行。从可读性的角度来看,我会说这是一个倒退。
标签: c++ performance function object functional-programming