Ho capito che int x{};
è una sorta di inizializzazione di default, ma è esattamente la stessa di int x = 0;
?C'è una differenza tra int x {}; e int x = 0 ;?
risposta
Il risultato è lo stesso in questo caso.
Non
int x{};
è una sorta di default-inizializzazione
esattamente. Vedi default initialization.
int x{};
è value initialization (dal C++ 11),
Questa è l'inizializzazione eseguita quando una variabile è costruito con un inizializzatore vuoto.
E gli effetti di inizializzazione valore in questo caso (cioè nessun tipo categoria né tipo array) sono:
4) altrimenti, l'oggetto è zero inizializzato.
Infine gli effetti di zero initialization in questo caso sono:
Se T è un tipo scalare, il valore iniziale dell'oggetto è il integrale costante nullo esplicitamente convertito T.
D'altra parte, int x = 0;
è copy initialization; x
viene inizializzato con il valore 0
.
Come @PaulR menzionato, c'è una differenza che int x{};
è supportato solo da C++ 11, mentre int x = 0
non ha tale restrizione.
In questo caso sono identici. int x{}
inizializzerà x
nello stesso modo di static int x
; cioè a zero. Detto questo, trovo lo int x = 0
più chiaro e ha il vantaggio che funziona con gli standard C++ più vecchi.
Sono entrambi la stessa identica cosa. Entrambi saranno inizializzati su 0
.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int y{};
int x = 0;
cout << "y: " << y << endl;
cout << "x: " << x << endl;
return 0;
}
USCITA:
y: 0
x: 0
Si prega di considerare di migliorare questa risposta aggiungendo riferimenti rilevanti, che spiegano che l'output di questo codice segue lo standard, piuttosto che essere causato da [comportamento non definito] (https://en.wikipedia.org/wiki/Undefined_behavior). –
C'è differenza: int x = 1.888; lavorerà con x come 1. Molti problemi in seguito. Tutti i ragazzi professionisti hanno affrontato a volte, nel loro codice o in altri.
ma int x {1,888}; NON compilerà e risparmia problemi.
C'è una domanda correlata a https://stackoverflow.com/questions/20603403/c11-variable-initialization-and-declaration – Jason
Non è vero che 'int x {}' è supportato in C++ 11 e solo in seguito?Per le persone che hanno bisogno di scrivere codice portatile che funzioni con vecchi standard C++ potrebbe non esserci il caso di preferire 'int x = 0'? –
@PaulR Aggiunto come differenza tra di loro. – songyuanyao