我不太明白std::function实际包含的实例是什么.
通过按值或按引用传递它是否更有效?
以下示例中的性能影响是什么?
通过值:
void printStats(std::function<void(const char *)> printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
Run Code Online (Sandbox Code Playgroud)
通过rvalue-reference:
void printStats(std::function<void(const char *)>&& printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
Run Code Online (Sandbox Code Playgroud)
首先,std::function要求在目标是函数指针的情况下避免分配std::reference_wrapper; 鼓励实施以避免分配"小"目标:
[...]例如,其中
f目标是仅包含对象的指针或引用的对象以及成员函数指针.
这意味着复制std::function其目标很大的将涉及目标的分配和副本(不允许引用计数,因为目标可能具有可变状态).但是,在您的特定情况下,由于您使用prvalue临时调用函数,因此将省略该副本.
在您的特定情况下,由于您正在立即调用该函数,因此您无需担心取得它的所有权,因此最好通过const引用来获取该函数.通过右值引用来获取它将使具有现有左值或const引用函数的用户感到头疼; 他们需要std::move它(在前一种情况下)或创建一个prvalue临时副本(在后一种情况下).
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |