- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有一个作业问题让我绞尽脑汁:
我必须在 C++ 中创建一个数组类,其中在编译时检查对数组中元素的索引访问,即如果我尝试使用超出 ita 大小的索引访问数组,它将导致编译错误.
我想我会使用枚举而不是整数作为索引,但我和我的导师谈过,他告诉我这不是正确的方法,他还说“认为以同样的价格你可以使用它来拥有索引不从 0"或类似内容开始的数组。
如果有任何建议,我将不胜感激!
最佳答案
std::array
来自 C++11 正是你所要求的。它是一个编译时已知大小的数组,允许编译时检查越界错误
例子:
std::array<int, 5> arr = {1, 2, 3, 4, 5};
std::get<3>(arr); // returns 4;
std::get<9>(arr); // COMPILE ERROR
在内部,此数组是使用模板化数组大小(如您从示例中看到的,第一行中的第二个模板参数)和 static_assert
实现的它对您的条件执行编译时检查(在本例中为 index < array_size
)。同样如您在示例中所见,您使用的是 std::get 而不是 operator[],因为它再次使用模板化参数作为索引,它必须是常量表达式 ( constexpr
) 以允许编译时检查而不是运行时。
如果你需要一个变量索引,你可以使用旧的好运算符[],但你不会有编译时越界检查,这显然是不可能的。
关于c++ - C++ 中的编译时安全数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17296866/
我正在尝试在现有的 Angular 项目中安装 AWS Amplify。我将 Cognito 用户池与 Cognito 联合身份一起使用。我可以登录,但是当我尝试调用我的 API 时,我收到消息 {"
我有一个 AWS 托管的 Elasticsearch 服务(比如 smallES),它附加了一个正常工作的 S3 存储桶,其中包含过去 1 年的逐日滚动索引。出于某种商业原因,我创建了另一个 AWS
我是一名优秀的程序员,十分优秀!