我正在尝试制作一个应该为{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
的大小,并且仍然可以使用。)
答案 0 :(得分:0)
它将在-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();
}