Pregunta

Una pregunta rápida:¿por qué no en C++11 de ofrecer un "usuario" (en realidad, de la biblioteca estándar) define literal para la creación de un std::string, tales como

auto str = "hello world"s; // str is a std::string

Al igual que C++, Objective-C soporta tanto el C-strings de estilo y una más amigable para el usuario tipo de biblioteca NSString;sin embargo, a diferencia de C++, nadie se confunde entre los dos, porque es trivial para crear un NSString prefijando un literal de cadena, con @.De hecho, es raro ver código Objective-C, donde un literal no tiene la @ prefijo.Todo el mundo sabe que es la forma de hacerlo, usa NSString y entra con ella.

C++11 definida por el usuario literales permite esto, y de hecho la UDL sección en Stroustrup C++11 preguntas frecuentes utiliza exactamente este ejemplo.Además, Udl sin subrayado son reservados, por lo que no habría ningún problema en permitir que un simple s como anteriormente, no hay ninguna posibilidad de que choque con otra cosa.

Tal vez me estoy perdiendo algo, pero parece que esta sería una muy valiosa y libre de riesgo, además de la lengua, así que ¿alguien sabe por qué C++11 no ofrecen?Es probable que aparezca en C++14?

¿Fue útil?

Solución

Definido por el usuario literales fueron bastante nuevo en C++11, que esto no estaba incluido, pero es en C++14( en el artículo 21.7, en caso de que alguien se preocupa).Y sí, usa s como sufijo.El resultado exacto tipo depende del tipo de la cadena literal, un "estrecho" literal da un std::string, una sub-16 literal da un u16string, y un u32 literal da un u32string.Ah, y sí, si usted insiste en el uso de una amplia cadena literal que va a producir un wstring.

Tenga en cuenta que el s sufijo también se utiliza para significar segundos (que se define en <chrono>), pero en realidad no hay conflicto entre los dos -s en un literal de cadena significa una cadena, y s en un número de segundos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top