- Messaggi
- 2,456
- Reazioni
- 2,008
- Punteggio
- 134
Non penso lo riconosceranno come errore, magari terranno conto del caso limite ed implementeranno un fix...il motivo è che questo funge
C++:unsigned int cnt = 0; for (unsigned int i = 0; i < 3; i++) { for (unsigned int j = 0; j < 3; j++) { if (m[i][j].flag || m[i][j].v.size()) cout << cnt++ << endl; } }
cioè dal punto di vista semantico è il codice originale che cerca di infilarsi "sotto il cofano" della gestione degli array, cosa che idiomaticamente non dovrebbe fare
voglio dire, se hanno implementato l'allocazione degli elementi degli array multidimensionali in "modo strano" nel caso -O3, ci saranno ragioni prestazionali, non è una svista
Si, e come ho mostrato sopra funziona anche questo, che è una variazione minima rispetto a ciò che ha scritto M1n021.
C++:
#include <iostream>
using namespace std;
int main()
{
int m[3][3] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
for(unsigned int i = 0; i < 3 * 3 && *(*m + i); ++i)
{
cout << i << endl;
}
}
Ho solo sostituito
[i]
.Capisco l'undefined behavior... ma è un tantino aleatorio così.

Per altro si verifica con GCC/G++, gli altri a quanto sembra funzionano come ci si aspetterebbe.