使用std::integer_sequence填充std::array对比std::fill的优势探讨
关于std::integer_sequence与std::fill初始化std::array的对比疑问
我本身没有实际问题,纯粹出于好奇。浏览Stack Overflow时看到一篇介绍用std::integer_sequence初始化std::array的帖子,这个技巧虽然巧妙,但对比传统的std::fill是否存在优势?我在Quick Bench中测试发现,在-Og和-O3优化等级下二者性能无差异,且前者可读性更差。作为C++新手,我附上自己实现的std::fill版本代码及测试用例,想确认是否存在认知误区。
实现代码
template<typename T, size_t N, typename... Ts> auto make_fill_array(Ts&&... args) noexcept(std::is_nothrow_constructible<T>::value) -> std::array<T, N> { std::array<T, N> ret; std::fill(ret.begin(), ret.end(), T{std::forward<Ts>(args)...}); return ret; }
我还写了针对可通过std::initializer_list构造的容器的模板特化,不过都是些样板代码,就不贴了。
测试用例示例
auto fillarray = make_fill_array<Point, 10>(1, 6);
或者
auto fillarray2 = make_fill_array<std::vector<Point>, 5>(5, Point{1, 6});
内容的提问来源于stack exchange,提问作者suspiciously_large_carrot
相关产品推荐
相关产品推荐

