gpt4 book ai didi

c++ - 索引上的 static_assert 在编译时知道

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:02 25 4
gpt4 key购买 nike

有没有办法静态断言编译时已知的索引,否则在运行时断言?示例:

template <class T, int Dim>
class Foo
{
T _data[Dim];
public:
const T &operator[](int idx) const
{
static_assert(idx < Dim, "out of range"); // error C2131: expression did not evaluate to a constant
return _data[idx];
}
};

int main()
{
Foo<float, 2> foo;

foo[0];
foo[1];
foo[2]; // compiler error

for (int i=0; i<5; ++i)
{
foo[i]; // run time assert when i > 1
}

return 0;
}

最佳答案

您可以简单地抛出异常或断言。它将在 constexpr 上下文中编译失败。这仅在可以在 constexpr 上下文中评估抛出条件时才有效。请注意,某些版本的 gcc 中有一个错误会阻止 throw 工作。

关于c++ - 索引上的 static_assert 在编译时知道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42194535/

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