如何无需辅助函数,用static_assert调用接收数组指针与长度的函数?
无需辅助函数直接用static_assert测试find_minimum
当然可以不用辅助函数直接实现测试,以下是几种可行的方式:
方法1:直接使用std::initializer_list的constexpr成员
std::initializer_list的begin()和size()都是constexpr方法(C++11起支持),可以直接在static_assert中调用:
// 写法1:显式指定初始化列表类型,手动传入大小 static_assert(find_minimum(std::initializer_list<int>{2, 3, 4}.begin(), 3) == 2); // 写法2:利用初始化列表的size()成员,避免手动写大小 constexpr auto test_list = std::initializer_list<int>{2, 3, 4}; static_assert(find_minimum(test_list.begin(), test_list.size()) == 2);
方法2:使用constexpr数组+自动推导大小
定义一个constexpr数组,利用数组到指针的衰减特性传递给函数,同时通过编译期函数获取数组大小:
C++17及以上(使用标准库的std::size)
constexpr int test_arr[] = {2, 3, 4}; static_assert(find_minimum(test_arr, std::size(test_arr)) == 2);
C11/C14(自定义constexpr数组大小函数)
如果你的编译器不支持C++17的std::size,可以自己实现一个编译期的数组大小获取函数:
template<typename T, size_t N> constexpr size_t array_size(const T(&)[N]) noexcept { return N; } // 测试代码 constexpr int test_arr[] = {2, 3, 4}; static_assert(find_minimum(test_arr, array_size(test_arr)) == 2);
这些方式都不需要额外的辅助函数,直接在编译期完成find_minimum的测试验证。
内容的提问来源于stack exchange,提问作者DuduArbel
相关产品推荐
相关产品推荐

