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[]() const
和 std::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];
}
我真的无法在任何地方找到在线解决方案。我有点像 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[]() const
和 std::array::at() const
不是 constexpr
方法,因此不能在常量表达式中使用。
不幸的是,std::vector
需要内存分配,因此与 constexpr
.
对于C-style数组的情况,你只需要声明它constexpr
int main ()
{
// VVVVVVVVV
constexpr int a[] = {1,2};
constexpr auto b = a[1];
}