Articles of inizializzazione

C ++ inizializza le variabili statiche in class?

Ho notato che alcune delle mie funzioni in una class non stanno effettivamente accedendo all’object, quindi le ho rese static . Quindi il compilatore mi ha detto che tutte le variabili a cui hanno accesso devono essere anche statiche – beh, abbastanza comprensibili finora. Ho un sacco di variabili stringa come string RE_ANY = “([^\\n]*)”; […]

Creazione di oggetti nello stack / heap?

Il codice seguente crea un object nello stack: Object o; Quando creiamo un object sull’heap possiamo usare: Object* o; o = new Object(); piuttosto che: Object* o = new Object(); Quando dividiamo la creazione dell’object heap su due righe e chiamiamo il costruttore sulla seconda riga ( o = new object() ), questo significa nella […]

C ++ 11: corretta l’inizializzazione di std :: array?

Se inizializzo uno std :: array come segue, il compilatore mi avvisa delle parentesi mancanti std::array a = {1, 2, 3, 4}; Questo risolve il problema: std::array a = {{1, 2, 3, 4}}; Questo è il messaggio di avviso: missing braces around initializer for ‘std::array::value_type [4] {aka int [4]}’ [-Wmissing-braces] È solo un bug nella […]

Quando viene eseguito il blocco statico di una class?

Ho 2 vasi, chiamiamoli a.jar e b.jar. b.jar dipende da a.jar. In a.jar, ho definito una class, chiamiamola StaticClass. In StaticClass, ho definito un blocco statico, chiamando un metodo chiamato “init”: public class StaticClass { static { init(); } public void static init () { // do some initialization here } } in b.jar, ho […]

Quali variabili sono inizializzate quando in Delphi?

Quindi ho sempre sentito che i campi di class (basati su heap) sono stati inizializzati, ma le variabili basate sullo stack non lo erano. Ho anche sentito che anche i membri dei record (anch’essi basati sullo stack) non sono stati inizializzati. Il compilatore avverte che le variabili locali non sono inizializzate ([Avviso DCC] La variabile […]

Come inizializzare la memoria con un nuovo operatore in C ++?

Sto appena cominciando a entrare in C ++ e voglio prendere alcune buone abitudini. Se ho appena assegnato un array di tipo int al new operatore, come posso inizializzarli tutti a 0 senza doverli scorrere tutti da solo? Dovrei semplicemente usare memset ? Esiste un modo “C ++” per farlo?

Perché i membri della mia struct non sono inizializzati correttamente usando `{}`?

Ho avuto il seguente codice: #include struct T { int a, b, c; }; int main() { T t = {0}; std::cout << ta << ',' << tb << ',' << tc << '\n'; } Uscita : 0,0,0 Dopo molti anni in cui questo codice funzionava felicemente in un ambiente di produzione critico, al servizio […]

Significato della nuova class (…) {{…}} idioma di inizializzazione

Cosa significa {{ … }} blocco nel seguente codice? class X { private Y var1; private X() { Z context = new Z(new SystemThreadPool()) {{ var1 = new Y(); }}; } }

L’inizializzazione di sé è valida?

Ho questa domanda, a cui ho pensato prima, ma ho capito che non è banale rispondere int x = x + 1; int main() { return x; } La mia domanda è se il comportamento del programma è definito o indefinito se è valido del tutto. Se è definito, è il valore di x noto […]

C ++ 11 consente l’inizializzazione in-class di membri non statici e non const. Cosa è cambiato?

Prima di C ++ 11, era ansible eseguire l’inizializzazione in class solo su membri const statici di tipo integrale o di enumerazione. Stroustrup ne parla nelle sue FAQ C ++ , dando il seguente esempio: class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not […]