Lambda表达式与成员函数指针在std::views::transform中有何差异?
C++视图变换中的拷贝陷阱:成员函数指针 vs Lambda表达式
Barry指出,在使用std::views::transform处理容器视图时,直接传递成员函数指针&Planter::getPlants的实现方式更优。因为用Lambda表达式[](Planter const& planter){ return planter.getPlants(); }的写法会意外触发不必要的拷贝操作。
以下是对比代码示例:
#if 1 auto plants = planters | std::views::transform([](Planter const& planter){ return planter.getPlants();}) | std::views::join | std::views::common ; // 触发Plant拷贝构造函数×5 #else auto plants = planters | std::views::transform(&Planter::getPlants) | std::views::join ; #endif // 触发Plant拷贝构造函数×2
其中Plant是int类型的包装类,Planter是std::vector
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

