C++:将 array/vector 整数元素转换为 constexpr

C++: cast array/vector integer element to constexpr

我真的无法在任何地方找到在线解决方案。我有点像 C++11 之前的恐龙,我无法弄清楚 constexpr.

的类型转换

有谁知道如何将 C 样式数组 and/or 和 std::vector(整数)元素转换为 constexpr

也就是说,假设

int a[]={1,2};
vector<int> v={1,2};

如何将 a[1]v[1] 转换为 constexpr

constexpr int b=a[1];

例如,编译器会在 for 循环中报错。

error: the value of ‘a’ is not usable in a constant expression
     constexpr int b=a[i];

我暂时没什么想法。谢谢

constexpr 必须有一个常量表达式,即它们必须在编译时已知。您不能使用 a 执行对 b 的赋值,在这种情况下这是一个错误。

在给定的代码片段中,a 没有定义为 constexpr,因此,它没有明确告诉编译器该表达式是一个常量。

建议:如果你可以至少使用 C++14,而不是 std::vector,如果可以的话, 使用 std::array

声明它constexpr

#include <array>

int main () 
 {
   constexpr std::array<int, 2u> a {1, 2};

   constexpr auto b = a[1];
 }

std::array 是与 constexpr 兼容的类型,因此它是 operator[]()const 版本),或者它也是 at() 方法(const 版本).

C++14 是必需的,因为在 C++11 中 std::array::operator[]() conststd::array::at() const 不是 constexpr 方法,因此不能在常量表达式中使用。

不幸的是,std::vector 需要内存分配,因此与 constexpr.

不兼容(在 C++20 之前)

对于C-style数组的情况,你只需要声明它constexpr

int main () 
 {
// VVVVVVVVV   
   constexpr int a[] = {1,2};

   constexpr auto b = a[1];
 }