2008-12-09 4 views

Répondre

9

en C++ 11, il y a la chaîne brute littérale:

cout<<R"((\"ddd\aa)\n)"<<endl; 
cout<<R"delimiter((\"ddd\aa)\n)delimiter"<<endl; 

sortie est:

(\"ddd\aa)\n 
(\"ddd\aa)\n 
6

Ceci n'est actuellement pas possible. Les littéraux de chaînes C++ gérés ont presque exactement les mêmes règles que les chaînes C++ normales. La spécification C++ gérée est en fait juste une augmentation de la norme ANSI C++.

Actuellement, il n'y a pas de support pour la syntaxe littérale de style C# en C++ (gérée ou non). Vous devez manuellement échapper tous les caractères.

Voir la section 9.1.3.3 dans la spécification C++/CLI pour plus de détails. (Spec Link)

+1

Cette réponse était beaucoup plus juste quand il a été donné alors il est maintenant. – RichardPlunkett

+0

@RichardPlunkett à la lumière de la réflexion de l'état actuel des choses devrions-nous modifier ou supprimer ce post? –

+0

Les littéraux de chaînes brutes peuvent être utilisés pour obtenir le résultat souhaité: Chaîne^f = gcnew Chaîne (R "(C: \ foo \ bar.txt)"); [Google msdn C++ Chaînes Littéraux pour plus d'informations] – Cameron

3

Bien que pas tout à fait aussi laconique que le '@' C# string verbatim littéral, ce qui suit compile/Clr: pure, de sorte que vous pouvez utiliser C++ Raw String Literals pour MSIL pur et un résultat similaire:

String^ f = gcnew String(R"(C:\foo\bar.txt)"); 

littéraux chaîne brute peuvent être utilisés dans régulière C++ aussi:

char *x = R"(C:\foo\bar.txt)"; 

Google « msdn C++ littéraux de chaîne » pour plus d'infos

+0

Oh! génial!! Merci beaucoup – Cluster