Domanda

Il seguente codice richiama UB ?

int main(){
  volatile int i = 0;
  volatile int* p = &i;
  int j = ++i * *p;
}
È stato utile?

Soluzione

sì lo è Comportamento indefinito perché stai cercando di violare la seconda regola..

Lo afferma la Norma

1) Tra il punto della sequenza precedente e quello successivo il valore memorizzato di un oggetto deve essere modificato al più una volta mediante la valutazione di un'espressione.

2) Inoltre, si potrà accedere al valore precedente solo per determinare il valore da memorizzare.

Nota:L'ordine di valutazione degli operandi di * l'operatore è non specificato E *p non è altro che i.

Altri suggerimenti

Sì -. Sia ++ I o * p (che è i) può essere valutata prima

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top