You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需辅助函数,用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:25:21