C++ 中的编译时安全数组?

2024-04-16

有一个我绞尽脑汁思考的家庭作业问题:

我必须在 C++ 中创建一个数组类,其中在编译时检查对数组中元素的索引访问,即如果我尝试使用 ita 大小之外的索引访问数组,则会导致编译错误。

我以为我应该使用枚举作为索引而不是整数,但我与我的导师交谈,他告诉我这不是正确的方法,他还说“认为以相同的价格,你可以使用它来拥有一个数组,其中索引不是从 0" 或类似的值开始。

我将不胜感激任何建议!


std::arrayfrom C++11 正是你所要求的。它是一个编译时已知大小的数组,允许编译时检查越界错误

Example:

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)以允许编译时检查而不是运行时检查。

如果您需要一个变量索引,您可以使用旧的好的运算符[],但您不会进行编译时越界检查,这显然是根本不可能做到的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中的编译时安全数组? 的相关文章

随机推荐