gpt4 book ai didi

c++ - 按值与按引用传递仿函数对象(C++)

转载 作者:IT老高 更新时间:2023-10-28 22:00:54 26 4
gpt4 key购买 nike

比较通用集成函数:

template <class F> double integrate(F integrand);

template <class F> double integrate(F& integrand);

template <class F> double integrate(const F& integrand);

各有什么优缺点? STL用的是第一种方式(传值),是不是最通用?

最佳答案

函数对象通常应该很小,所以我认为按值传递它们不会显着影响性能(将其与函数在其主体中所做的工作进行比较)。如果您按值传递,您还可以从代码分析中获益,因为按值参数是函数的本地参数,优化器可以告诉何时以及何时不能省略来自仿函数数据成员的加载。

如果仿函数是无状态的,则将其作为参数传递意味着完全没有成本——仿函数采用的填充字节不必具有任何特定值(至少在 GCC 使用的 Itanium Abi 中)。使用引用时,您始终必须传递一个地址。

最后一个 (const T&) 的缺点是在 C++03 中不适用于原始函数,因为在 C++03 中,如果您尝试,程序格式不正确将 const 应用于函数类型(并且是 SFINAE 案例)。当应用于函数类型时,最近的实现会忽略 const

第二个(T&)有一个明显的缺点,就是不能传递临时仿函数。

长话短说,我通常会按值(value)传递它们,除非我在具体案例中看到明显的好处。

关于c++ - 按值与按引用传递仿函数对象(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com