windows - String-bogstaver i C ++ med \_T makro

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad er forskellen (hvis nogen) mellem dette


\_T("a string")


og


\_T('a string')


?

Bedste reference


For det første er \_T ikke en standard del af C ++. Jeg har tilføjet 'windows' tag til dit spørgsmål.


Nu er forskellen mellem disse, at den første er korrekt, og den anden er ikke. I C ++ er ' til citering af enkeltpersoner , og " er til citering af strenge.

Andre referencer 1


Den anden er forkert. Du placerer en streng bogstavlig mellem enkelt citater.

Andre referencer 2


'a string' er en såkaldt 'multicharacter literal'. Den har type int og en implementeringsdefineret værdi. Dette er [lex.ccon] i standarden.


Jeg ved ikke, hvilke værdier MSVC giver til multicharacter-bogstaver, og jeg ved ikke sikkert, hvad den MS-specifikke \_T makro ender med at gøre med det, men jeg forventer, at du får en smal multicharakter bogstavelig på smalle konstruktioner , og en bred multicharacter bogstavelig på brede bygninger. Prefixet L er det samme for strenge og bogstaver.


Det er forkert, alligevel: multicharacter literals er stort set ubrugelige og er bestemt ingen erstatning for strenge. "a string" er en streng bogstavelig, hvilket er hvad du vil.

Andre referencer 3


Du bruger '' til enkelt tegn og "" til strenge. \_T('a string') er forkert, og dens adfærd er kompilatorspecifik.


I tilfælde af MSVC bruger den kun første tegn. Eksempel:


#include <iostream>
#include <tchar.h>

int main()
{
    if (\_T('a string') == \_T('a'))
        std::cout << (int)'a' << " = " << \_T('a');
}


output: 97 = 97

Andre referencer 4


Enkelt citater bruges primært, når der betegnes et enkelt tegn:


char c = 'e' ;


Dobbelt citater bruges med strenge og output statements:


string s = "This is a string";
cout << "Output where double quotations are used.";