Il seguente codice ha un disperato bisogno : values()
compilare, almeno in Ideone :: C++ 14:Perché è necessario inizializzare un membro di array non statico in una classe constexpr?
#include <iostream>
template<int N>
struct Table
{
constexpr Table() : values()
{
for (auto i = 0; i < N; ++i)
{
values[i] = i * i * i;
}
}
int values[N];
};
int main() {
constexpr auto a = Table<1000>();
for (auto x : a.values)
std::cout << x << '\n';
}
Ma perché? Avevo pensieri lungo "i valori potrebbero anche essere inizializzati in modo non consecutivo e valori() dicono esplicitamente che inizializziamo in modo conforme a constexpr". Ma non sta omettendo lo : values()
altrettanto chiaro?
'clang' dà uno strano messaggio:' assegnazione a oggetto al di fuori della sua durata non è consentita in un'espressione costante' per '=' nel costruttore di 'Table' se ometto' values () '. – Holt
"per il costruttore di una classe o di una struttura, ogni oggetto secondario di classe di base e ogni membro di dati non statici non varianti deve essere inizializzato." – krOoze
Tuttavia, è inizializzato in ogni caso, solo Non esplicito in ogni caso. Funziona per le classi non-constexpr – IceFire