【发布时间】:2021-11-19 02:36:26
【问题描述】:
所以简化的代码 sn-p (1) 将是
void f2(someClass* ptr, int x)
{
//some code
}
void f(someClass* ptr, bool cond)
{
//do something with ptr
if (someConditionThatIsResultOfFunctionWork)
{
if (cond)
{
//do something else with ptr
f2(ptr, x1);
}
else
{
//do something else with ptr
f2(ptr, x2);
}
}
}
代码sn-p(2):
void f(someClass* ptr, bool cond)
{
auto f2asLambda = [](someClass* ptr, int x)
{
//some code
};
//do something with ptr
if (someConditionThatIsResultOfFunctionWork)
{
if (cond)
{
//do something else with ptr
f2asLambda(ptr, x1);
}
else
{
//do something else with ptr
f2asLambda(ptr, x2);
}
}
}
这些代码 sn-ps 在性能等方面是否相同?如果 (2) 将为 lambda 创建额外的变量,而我们可能根本不调用它,它是否使使用函数而不是命名的 lambda 更可取?
【问题讨论】:
-
您应该根据
f2是否属于f来决定两者。性能是当你有工作代码然后根据基准做出决定时衡量的东西;) -
"...我们可能根本不会调用它"如果您在
if (someConditionThatIsResultOfFunctionWork)分支中定义 lambda 则不会 -
@463035818_is_not_a_number 如果在现实中使用更多 if-else 会更复杂一些,所以我不能只将 lambda 移动到 if 以确保它总是被调用,仍然有分支不会调用它。那么使用函数会是更好的选择吗?
-
很可能没有区别。编译器实际上会将第二个片段重写为第一个片段,只有
f2函数将被命名为SomeClassName::operator()。f2asLambda变量很可能会被优化掉,因为它是一个没有数据成员的空对象。
标签: c++ c++11 variables lambda c++14