¿Cuál es el equivalente en C++ del símbolo C# @ prefijando cadenas? Para escapar de los símbolos de forma automática?¿Cuál es el equivalente en C++ del símbolo C# @ prefijando cadenas?
Ejemplo: var howManySlashesAreThereIn = @"\\\\\\"
;
¿Cuál es el equivalente en C++ del símbolo C# @ prefijando cadenas? Para escapar de los símbolos de forma automática?¿Cuál es el equivalente en C++ del símbolo C# @ prefijando cadenas?
Ejemplo: var howManySlashesAreThereIn = @"\\\\\\"
;
Está buscando la característica "cadena sin procesar" de C++ pero es una adición bastante reciente (C++ 11, creo).
std::string howManySlashesAreThereIn = R"(\\\\\\)";
Está documentado en 2.14.5 String lieterals
del estándar C++ 11, sin embargo, que tomo puede ser un poco seco para ti, así que te sugiero googlear arriba en "raw string" c++
.
Además de deshacerse de los escapar duplicando monstrosites como "\\\\nasbox\\sharename\\downloads\\super_sekrit_stuff"
, sino que también le permite evitar la "adición de \n
personajes y la combinación de cadenas adyacentes" truco como torneado:
htmlString =
"<HTML>\n"
"<HEAD>\n"
"<TITLE>My page</TITLE>\n"
"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">\n"
"</HEAD>\n"
"<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n"
"<P> </P>\n"
"<PRE>\n";
en algo más legible (no exactamente la misma debido a los espacios en la segunda variante, pero perfectamente bien para HTML ya que ignora los espacios añadidos en este caso):
htmlString = R"xyzzy(
<HTML>
<HEAD>
<TITLE>My page</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
</HEAD>
<BODY LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff">
<P> </P>
<PRE>
)xyzzy";
Esto es antiguo, pero se supone que es 'R" (.. .) "' en su último ejemplo, y probablemente no debería tener una barra invertida ya que es una cadena sin formato. – Rapptz
La primera versión escrita no tendrá la sangría que muestra la segunda versión. Puede mover todas las comillas izquierdas en la versión antigua a la izquierda para acumular espacio en blanco si desea una sangría. Las cadenas sin formato son más fáciles de resolver. – emsr
C++ 11 agrega raw
literales de cadena que son al menos algo similares.
R"(This is a raw literal)";
Estos son particularmente útiles para expresiones regulares, como:
R"@(\w+\d*)@"
... lo que haría, como un literal tradicional sería:
"\\w+\\d*"
Aunque la diferencia no es muy grande , puede hacer una diferencia, especialmente en una expresión regular más larga.
El delimitador '@' debe estar dentro de las comillas. – user362515
@ user362515: Oops: increíble cómo un error tipográfico puede sobrevivir durante casi 4 años cuando no se ejecuta a través de un compilador ... –
Here es un ejemplo de literales de cadena sin formato (C++ 11).
Las líneas nuevas y las barras diagonales inversas aparecen literalmente.
Quiere decir cadenas verbatim. – Mehrdad
posible duplicado de [Cadena de literales C++?] (Http://stackoverflow.com/questions/2597322/string-literals-c) – Mehrdad
@Jake - Gotcha! Gracias por la aclaración. El término .Net es "literal de cadena verbatim", y el propósito es que "\" no se trate como un carácter de escape: http://msdn.microsoft.com/en-us/library/aa691090%28v=vs .71% 29.aspx. No hay equivalente en Java ni en las versiones actuales de C++ (y no, I * no * considera que C++ 11 sea una "versión actual";)) – paulsm4