我有验证码
int a[5];
for (int i = 0; i < 5; i++){
a[i] = i * i;
}
有没有办法使此数组恒定,以便其他代码可以使用它但不能更改它。
答案 0 :(得分:1)
最简单的方法是使用constexpr
函数和std::array
:
constexpr std::array<int, 5> make_array() {
std::array<int, 5> a{};
for (int i = 0; i < 5; i++){
a[i] = i * i;
}
return a;
}
//...
const std::array<int, 5> a = make_array();
NB。正如@ M.M所指出的那样,此代码仅对C ++ 17有效,因为在C ++ 17之前,数组上的operator[]
不是constexpr
。
答案 1 :(得分:0)
使用现代C ++(array
和立即调用的Lambda(IIL)),可以实现以下目的:
const auto a = []()
{
std::array< int, 5 > x;
for (int i = 0; i < 5; i++)
{
x[i] = i * i;
}
return x;
}(); // IIL
使用lambda优于函数调用,因为您可以将局部变量捕获到lambda中并使用它们,而无需通过参数([&]
或[=]
而不是{{1} }。
就像函数一样,lambda可以轻松地内联到您的代码中,因此不会有开销。