// (1)
template<typename T>
T add1(T a, T b)
{
return a + b;
}
// (2)
auto add2 = [](auto a, auto b)
{
return a + b;
};
在这个简单的例子中,我想知道哪个实现更好:
答案 0 :(得分:5)
所以回想一下,泛型lambda基本上定义了一个函数模板struct __some_uniq_name
{
template<typename T, typename U>
auto operator()(T a, U b) const
{
return a + b;
}
} add2;
,所以第二个版本基本上是:
add1
此处的代码与add1
*中的代码相同,除了一个是局部变量中的成员函数,另一个是自由函数模板。性能,代码大小或内联能力应该没有区别(但总是,测试测试!) - 唯一的区别是你可以在哪里使用。需要在很多地方添加东西吗?使用add2
。需要在一个特定的位置使用它吗?使用line="quick brown fox jumps over sleepy dog"
splits=${(MS)line##over*}
nextword=$splits[(w)1] #<-- returns "sleepy"
。
*除了它允许你添加不同类型的对象,所以如果你需要这样做,你只有一个选项。