fxsaber: È un comportamento corretto del compilatore? Sembra che A::i non venga creato al momento della chiamata del metodo A::f() che chiama A::i.
Cosa si intende per "creato"?
static è solo un modo per creare un rake per nascondere una variabile globale o una funzione, limitando la visibilità di una funzione o di una classe
La memoria di una variabile globale esiste sempre. E sì, per le variabili globali l'ordine di inizializzazione è molto importante (voglio dire, evitare di accedere alla variabile prima che sia inizializzata) Questo esempio ha funzionato...
После загрузки на исполнение mql5-программы каждой переменной выделяется память в соответствие с типом переменной. Переменные делятся на два типа по уровню доступа - глобальные переменные и локальные переменные, и по классам памяти: входные параметры mql5-программы, статические и автоматические. Каждая переменная при необходимости...
Cambierete il compilatore a questo punto? Personalmente, vorrei mantenere tutto com'è.
Non abbiamo intenzione di cambiare il comportamento.
Ma c'è un compito differito di rilevare gli errori di accesso alle variabili globali (prima dell'inizializzazione). Se implementiamo questa funzione, otterremo un avvertimento durante la compilazione del codice precedente: la funzione A::f() è usata per inizializzare A::i, che fornisce l'accesso alla variabile A::i che viene inizializzata.
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
Se implementiamo la funzione, otterrete un messaggio di avvertimento durante la compilazione del codice precedente: la funzione A::f() è usata per inizializzare A::i, che accede alla variabile A::i che viene inizializzata.
Non abbiamo intenzione di cambiare il comportamento
Allora contraddice il tuo concetto che una variabile è considerata dichiarata quando la dichiarazione è completa. Perché l'hai inventato? Se è così in un caso e diverso in un altro caso
int i = i; //Error: 'i' - undeclared identifier
Una buona lingua ha regole uniformi, non il contrario
Allora contraddice il tuo stesso concetto che una variabile è considerata dichiarata quando la dichiarazione è completa. Perché l'hai inventato? Se è così in un caso e diverso in un altro
Una buona lingua ha regole uniformi, non il contrario
Sono un ignorante totale, ma non ci avrei pensato (int i = i) nemmeno se avessi bevuto troppo....... 8(
Allora contraddice il tuo stesso concetto che una variabile è considerata dichiarata quando la dichiarazione è completa. Perché l'hai inventato? Se è così in un caso e diverso in un altro
Una buona lingua ha regole uniformi, non il contrario
In questo caso va bene.
Il punto è che si può ottenere un comportamento indefinito in altre condizioni più complicate. Gli autoscatti in C++ sono implementabili.
Qual è la differenza fondamentale rispetto all'esempio originale? Togli la roba extra e ce l'hai:
Solo che ci sono molte corde lì, e solo una qui
Se non c'è un errore di compilazione non dovrebbe essercene uno anche qui (e viceversa), altrimenti è un casino.
Ti sbagli, non è la stessa cosa.
La descrizione di una variabile statica in una classe è la sua pre-definizione (simile alla pre-definizione di una funzione o di una classe), ma la posizione, in effetti, dice solo al compilatore dove la variabile sarà memorizzata in memoria e quando dovrebbe essere inizializzata
È un comportamento corretto del compilatore? Sembra che A::i non venga creato al momento della chiamata del metodo A::f() che chiama A::i.
Cosa si intende per "creato"?
static è solo un modo per creare un rake per nascondere una variabile globale o una funzione, limitando la visibilità di una funzione o di una classe
La memoria di una variabile globale esiste sempre.
E sì, per le variabili globali l'ordine di inizializzazione è molto importante (voglio dire, evitare di accedere alla variabile prima che sia inizializzata)
Questo esempio ha funzionato...
Nell'esempio precedente ha funzionato...
Hai intenzione di cambiare il compilatore a questo punto? Personalmente, mi piacerebbe tenerlo così com'è.
Cambierete il compilatore a questo punto? Personalmente, vorrei mantenere tutto com'è.
Non abbiamo intenzione di cambiare il comportamento.
Ma c'è un compito differito di rilevare gli errori di accesso alle variabili globali (prima dell'inizializzazione).
Se implementiamo questa funzione, otterremo un avvertimento durante la compilazione del codice precedente: la funzione A::f() è usata per inizializzare A::i, che fornisce l'accesso alla variabile A::i che viene inizializzata.
Se implementiamo la funzione, otterrete un messaggio di avvertimento durante la compilazione del codice precedente: la funzione A::f() è usata per inizializzare A::i, che accede alla variabile A::i che viene inizializzata.
Grazie!
Non abbiamo intenzione di cambiare il comportamento
Allora contraddice il tuo concetto che una variabile è considerata dichiarata quando la dichiarazione è completa. Perché l'hai inventato? Se è così in un caso e diverso in un altro caso
Una buona lingua ha regole uniformi, non il contrarioAllora contraddice il tuo stesso concetto che una variabile è considerata dichiarata quando la dichiarazione è completa. Perché l'hai inventato? Se è così in un caso e diverso in un altro
Una buona lingua ha regole uniformi, non il contrarioSono un ignorante totale, ma non ci avrei pensato (int i = i) nemmeno se avessi bevuto troppo....... 8(
Sono un ignorante totale, ma non avrei pensato a questo (int i = i) nemmeno se avessi bevuto troppo....... 8(
E qual è la principale differenza rispetto all'esempio originale? Togliete le cose inutili e lo otterrete:
Solo che ci sono molte corde lì, e solo una qui.
Se non c'è un errore di compilazione non dovrebbe essercene uno anche qui (e viceversa), altrimenti è un casino
Allora contraddice il tuo stesso concetto che una variabile è considerata dichiarata quando la dichiarazione è completa. Perché l'hai inventato? Se è così in un caso e diverso in un altro
Una buona lingua ha regole uniformi, non il contrarioQual è la differenza fondamentale rispetto all'esempio originale? Togli la roba extra e ce l'hai:
Solo che ci sono molte corde lì, e solo una qui
Se non c'è un errore di compilazione non dovrebbe essercene uno anche qui (e viceversa), altrimenti è un casino.
Ti sbagli, non è la stessa cosa.
La descrizione di una variabile statica in una classe è la sua pre-definizione (simile alla pre-definizione di una funzione o di una classe), ma la posizione, in effetti, dice solo al compilatore dove la variabile sarà memorizzata in memoria e quando dovrebbe essere inizializzata