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

Rispondi quotando