c ++ - Ville std :: basic\_string < TCHAR > Vær bedre at std :: wstring på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Som jeg forstår, Windows #definerer TCHAR som den korrekte tegntype til din applikation baseret på bygningen - så det er wchar\_t i UNICODE bygger og char ellers.


På grund af dette undrede jeg mig over, om std::basic\_string<TCHAR> ville være at foretrække for std::wstring, da den første teoretisk ville matche karakteren af ​​ansøgningen, mens den anden altid ville være bred.


Så mit spørgsmål er i det væsentlige: Ville std::basic\_string<TCHAR> være at foretrække for std::wstring på Windows? Og ville der være nogen advarsler (dvs. uventet opførsel eller bivirkninger) for at bruge std::basic\_string<TCHAR>? Eller skal jeg bare bruge std::wstring på Windows og glemme det?

Bedste reference


Jeg tror på det tidspunkt, hvor det var tilrådeligt at frigive ikke-unicode-versioner af din ansøgning (for at understøtte Win95, eller for at gemme et KB eller to) er langt forbi: I dag er det underliggende Windows-system, du vil støtte, unicode-baserede (så brugen af ​​char-baserede systemgrænseflader vil faktisk komplicere koden ved at placere et shim-lag fra biblioteket), og det er tvivlsomt, om du slet ikke gemmer plads. Gå std::wstring, ung mand!

Andre referencer 1


Jeg har gjort det på meget store projekter, og det virker godt:


namespace std
{
#ifdef \_UNICODE
    typedef wstring tstring;
#else
    typedef string tstring;
#endif
}


Du kan bruge wstring overalt i stedet, men hvis du ikke behøver at kompilere ved hjælp af en multi-byte tegnstreng. Jeg tror ikke, du skal nogensinde støtte multi-byte tegnstrenge, dog i enhver moderne applikation.


Bemærk: Navnet på std skal være uden grænser, men jeg har ikke haft nogen problemer med ovennævnte metode i flere år.

Andre referencer 2


En ting at huske på. Hvis du beslutter at bruge std :: wstring hele vejen i dit program, skal du muligvis stadig bruge std :: streng, hvis du kommunikerer med andre systemer ved hjælp af UTF8.