gpt4 book ai didi

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

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

有一个作业问题让我绞尽脑汁:

我必须在 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/

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