gpt4 book ai didi

c++ - 当 [] 运算符失败并且我需要对此断言时会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 19:52:45 26 4
gpt4 key购买 nike

#include <iostream> 

int main() {
int a[] = { 21, 213, 45 };
static_assert(a[22], "error for a\n");
return (0);
}

我有一个形状像 int 数组的查找表,我需要在编译时检查 [] 运算符的使用是否可能导致读取这超出了范围。

我知道 static_assert 基本上需要两件事:

  • 常量表达式
  • 给定的表达式应该返回一个bool或者可以转换/等价于一个bool

现在在g++ 4.8.1中一个initializer_list在C++11中应该是一个常量表达式,我不知道看到了多少次if 构造这样写 if(arr[N]){...};那么这个断言有什么问题?

最佳答案

我认为您可以通过一点模板魔术来概括您想要的内容。

template<typename T,int N> constexpr bool bounds_check(T (&array)[N], int i)
{
return i < N;
}

查看实际效果:http://ideone.com/kj51N0

关于c++ - 当 [] 运算符失败并且我需要对此断言时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com