c++ - 是否可以从 constexpr 函数初始化 constexpr std::array ?
问题描述
我试图制作一个应该是的数组,{1, 2, 3, 4, 5, 6, 7, 8, 0}
我想做这样的事情:
constexpr std::array<int, 9> getFinalTable(){
std::array<int, 9> result{};
for (size_t i = 0; i < 9 - 1; ++i)
result[i] = i + 1;
result.back() = 0;
return result;
}
但是 Visual Studio 在这里输入时阻止了我:
constexpr std::array<int, 9> final_table = getFinalTable();
有可能做我想做的事吗?(我想要这样,这样我就可以随时更改Table
in 的大小并且仍然可以使用)。
解决方案
-std=c++17
它可以在(C++17 及更高版本)编译中正常工作。
从这个问题的第一个答案开始,OP的评论表明该行:
result.back() = 0;
不会让编译器编译它,因为:
main.cpp: In function 'constexpr std::array<int, 9> getFinalTable()':
main.cpp:9:21: error: call to non-'constexpr' function 'std::array<_Tp, _Nm>::value_type& std::array<_Tp, _Nm>::back() [with _Tp = int; long long unsigned int _Nm = 9; std::array<_Tp, _Nm>::reference = int&; std::array<_Tp, _Nm>::value_type = int]'
9 | result.back() = 0;
|
删除后,相关程序应如下所示:
const int size = 9;
constexpr std::array<int, size> getFinalTable() {
std::array<int, size> result{};
for (size_t i = 0; i < size - 1; ++i)
result[i] = i + 1;
// result.back() = 0;
return result;
}
int main(void) {
const std::array<int, size> final_table = getFinalTable();
}
推荐阅读
- android - 如何将复杂的自定义适配器与 Asynctask 一起使用并加载到 Recyclerview
- c# - 从后端使用地理功能
- javascript - 组件 JSX 属性中的 HTML 标记
- android - 在 Windows 上为 Android 构建时找不到 windows.h 文件
- python - Keras model.evaluate()
- python - 如何开始在 python 中编写一个程序,它读取一个记录很少的 excel 文件并生成更多记录用于测试目的
- reactjs - 使用 next-seo 的 LocalBusinessJsonLd 模式数组
- xpc - 从 mac 移植到 linux/windows 并寻找一个跨平台的 XPC 等价物
- python - 仅替换文件中多次出现的匹配组
- php - 2020 新版本中带有 HTTPS 的 XAMPP 无法正常工作,以前可以工作