PDA

Visualizza la versione completa : [C++] Underscore prima del nome variabile


starcraftworld
07-07-2011, 20:27
Quando si usa in C++ l'underscore prima del nome di una variabile?
Ad esempio:
_x=3;

ShaleN
07-07-2011, 21:02
Quando ti pare e piace? :D

:ciauz: :ciauz:

MItaly
07-07-2011, 21:31
Teoricamente quando ti pare, in pratica ci sono delle limitazioni.
Lo standard C++ infatti dice (§17.4.3.1.2):


Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore (__) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace. (Such names are also reserved in namespace ::std (17.4.3.1).)

Ossia, non puoi mai usare nomi che iniziano con due underscore e nomi che iniziano con un underscore seguito da una lettera maiuscola, e non puoi usare alcun nome che inizia con un underscore nel namespace globale. In tali contesti, infatti, i nomi fatti a quella maniera sono riservati per uso da parte della libreria C++; l'uso che questa ne può fare può essere interno (se guardi negli header standard vedrai che tutti i nomi "privati" iniziano con un doppio underscore) sia esterno (se una libreria standard fornisce negli header standard delle funzioni aggiuntive oltre a quelle previste dallo standard, lo fa con nomi che iniziano per doppio underscore).

In sostanza, quindi, puoi usare solo nomi che iniziano per underscore seguito da lettera minuscola, e comunque non nel namespace globale (puoi usarli ad esempio come membri di una classe).

Se non hai voglia di imparare queste limitazioni, limitati a non usare mai identificatori che iniziano per underscore.

starcraftworld
08-07-2011, 02:12
Grazie a entrambi ;)
Altra domanda: concettualmente se ho vari file .cpp in ciascuno dei quali è contenuta l'implementazione di una classe l'istruzione
using namespace std; va inserita in ciascuno di essi?

MisterBean
08-07-2011, 09:52
Si, a meno che tu non la metta in un file header che tutti includono, ma è una cosa abbastanza dannosa (sperimentato a mie spese).

MItaly
08-07-2011, 11:17
In linea di massima sarebbe meglio evitare in toto lo using namespace std a livello di file, restringendone l'uso a scope più ristretti (e magari importando solo i nomi che servono).
Va invece evitato nella maniera più assoluta negli header, dato che può causare casini a chi li include, che non si aspetta che così facendo si tira dentro tutto il namespace std nel namespace globale.

LeleFT
08-07-2011, 11:52
Non è consentito cambiare discorso all'interno di una discussione.
Se hai un nuovo quesito, apri una nuova discussione, altrimenti si mescolano domande e risposte a discussioni che non hanno nulla a che vedere con esse: il titolo, in questo senso, indica l'argomento della discussione.

Questo per evitare che vengano poste domande alle quali non si può trovare facilmente risposta con una ricerca.


Ciao. :ciauz:

ShaleN
08-07-2011, 18:39
Originariamente inviato da MItaly
Teoricamente quando ti pare, in pratica ci sono delle limitazioni.
Lo standard C++ infatti dice (§17.4.3.1.2):

Ossia, non puoi mai usare nomi che iniziano con due underscore e nomi che iniziano con un underscore seguito da una lettera maiuscola, e non puoi usare alcun nome che inizia con un underscore nel namespace globale. In tali contesti, infatti, i nomi fatti a quella maniera sono riservati per uso da parte della libreria C++; l'uso che questa ne può fare può essere interno (se guardi negli header standard vedrai che tutti i nomi "privati" iniziano con un doppio underscore) sia esterno (se una libreria standard fornisce negli header standard delle funzioni aggiuntive oltre a quelle previste dallo standard, lo fa con nomi che iniziano per doppio underscore).

In sostanza, quindi, puoi usare solo nomi che iniziano per underscore seguito da lettera minuscola, e comunque non nel namespace globale (puoi usarli ad esempio come membri di una classe).

Se non hai voglia di imparare queste limitazioni, limitati a non usare mai identificatori che iniziano per underscore.

Buona a sapersi, devo essere rimasto indietro.

:ciauz: :ciauz:

Loading