Comment std::stringstream poignée wchar_t* dans l'opérateur<<?
Étant donné que l'extrait de code suivant ne compile pas:
std::stringstream ss;
ss << std::wstring(L"abc");
Je ne pense pas que ce serait, soit:
std::stringstream ss;
ss << L"abc";
Mais il n' (sur VC++ au moins). Je suppose que cela est dû à la suivante ostream::operator<<
surcharge:
ostream& operator<< (const void* val );
Est-ce ont le potentiel d'silencieusement briser mon code, si j'ai, par inadvertance, mélange de types de caractères?
Êtes-vous intentionnellement à l'aide de
Non, c'est en fait l'inverse. Je suis en utilisant
stringstream
au lieu de wstringstream
?Non, c'est en fait l'inverse. Je suis en utilisant
wstringstream
tout le temps et parfois oublier d'ajouter L
avant de la chaîne, en particulier lors de la rédaction du journal des messages.OriginalL'auteur Pedro d'Aquino | 2010-10-01
Vous devez vous connecter pour publier un commentaire.
En un mot: oui, et il n'existe aucune solution de contournement à ce que je sache. Vous ne verrez une représentation d'une valeur de pointeur à la place d'une chaîne de caractères, il n'est donc pas un crash potentiel ou à un comportement indéterminé, juste pour que la sortie n'est pas ce que vous voulez.
OriginalL'auteur CB Bailey
Oui - vous devez
wstringstream
pourwchar_t
de sortie.Vous pouvez réduire ce en n'utilisant pas les littéraux de chaîne. Si vous essayez de passer
const wstring&
àstringstream
il ne compile pas, comme vous l'avez noté.OriginalL'auteur Steve Townsend