- 2,208
- 1,845
- CPU
- Intel I9-10900KF 3.75GHz 10x 125W
- Dissipatore
- Gigabyte Aorus Waterforce X360 ARGB
- Scheda Madre
- Asus 1200 TUF Z590-Plus Gaming ATX DDR4
- HDD
- 1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
- RAM
- DDR4 32GB 3600MHz CL18 ARGB
- GPU
- Nvidia RTX 3080 10GB DDR6
- Audio
- Integrata 7.1 HD audio
- Monitor
- LG 34GN850
- PSU
- Gigabyte P850PM
- Case
- Phanteks Enthoo Evolv X ARGB
- Periferiche
- MSI Vigor GK30, mouse Logitech
- Net
- FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
- OS
- Windows 10 64bit / OpenSUSE Tumbleweed
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ì. 😅 Ci si ritrova a non poter ottimizzare del codice poichè non si sa che cosa succede. Sarebbe meglio evitare di fargli spaccare il codice, piuttosto evitare l'ottimizzazione di alcune parti quando ci sono questi "edge case".
Per altro si verifica con GCC/G++, gli altri a quanto sembra funzionano come ci si aspetterebbe.