2008-12-09 12 views

Respuesta

9

en C++ 11, no hay cadena de texto literal:

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

salida es:

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

Esto no es posible actualmente. Los literales de cadena administrados de C++ tienen casi las mismas reglas exactas que las cadenas normales de C++. La especificación C++ administrada es de hecho solo un aumento del estándar ANSI C++.

Actualmente no hay soporte para la sintaxis literal del estilo C# en C++ (administrado o no). Debes escapar manualmente de cada personaje.

Consulte la Sección 9.1.3.3 en la especificación C++/CLI para obtener más detalles. (Spec Link)

+1

Esta respuesta fue mucho más correcta cuando se le dio entonces es ahora. – RichardPlunkett

+0

@RichardPlunkett a la luz del reflejo del estado actual de las cosas, ¿deberíamos editar o eliminar esta publicación? –

+0

Los literales de cadena sin formato se pueden usar para lograr el resultado deseado: String^f = gcnew String (R "(C: \ foo \ bar.txt)"); [Google msdn C++ cadenas literales para más información] – Cameron

3

bien no es tan escueto como el '@' cadena de C# textualmente literal, lo siguiente compila/Clr: puro, por lo que puede usar C++ Raw String Literals para MSIL puro y un resultado similar:

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

literales de cadena primas se pueden utilizar en regulares C++ también:

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

Google "MSDN C++ literales de cadena" para obtener más información

+0

¡Oh! ¡¡estupendo!! Muchas gracias – Cluster