2016-03-10 26 views

risposta

18

Il risultato è lo stesso in questo caso.

int x{}; è una sorta di default-inizializzazione

Non

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.

+4

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'? –

+1

@PaulR Aggiunto come differenza tra di loro. – songyuanyao

7

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.

3

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 
+10

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). –

0

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.

+0

C'è una domanda correlata a https://stackoverflow.com/questions/20603403/c11-variable-initialization-and-declaration – Jason

Problemi correlati