Sì, dal linguaggio di programmazione C++, 4a edizione:
Secondo Stroustrup (3a edizione, sezione 4.9.3), un identificatore è costituito da una sequenza di lettere e cifre. Il primo carattere deve essere una lettera. Il carattere di sottolineatura è considerato una lettera.
Quindi sì, dovrebbe essere portatile.
Sì, _
è un identificatore valido, poiché soddisfa i requisiti di sintassi. Fondamentalmente, un identificatore consiste in un trattino basso o lettera, seguito da zero o più altri caratteri che possono essere trattini bassi, lettere o cifre. (A partire da C++ 2011, gli identificatori possono anche contenere nomi di caratteri universali e altri caratteri definiti dall'implementazione, ma questo non è rilevante per la tua domanda.)
Ma probabilmente non è uno che dovresti usare nel tuo codice, a meno che tu non stia molto attento.
Come dice questa risposta, citando lo standard C++ del 2003:
Il tuo _
la variabile non è nello spazio dei nomi globale, quindi in questo caso sei al sicuro, ma è una buona idea evitare di definire qualsiasi identificatori che iniziano con un trattino basso.
Inoltre, credo che GNU gettext (che fornisce supporto per i messaggi localizzati) usi il nome _
per i propri scopi. (Probabilmente è stata una cattiva idea per GNU gettext fare questo, ma è stata una scelta conveniente.)