Fui picado recientemente por un error sutil.¿Por qué permitir la concatenación de cadenas literales?
char ** int2str = {
"zero", // 0
"one", // 1
"two" // 2
"three",// 3
nullptr };
assert(int2str[1] == std::string("one")); // passes
assert(int2str[2] == std::string("two")); // fails
Si tiene poderes divinos de revisión de código se dará cuenta de que se olvidó de la ,
después "two"
.
Después del esfuerzo considerable para encontrar ese error, tengo que preguntar ¿por qué alguien querría este comportamiento?
Puedo ver cómo esto podría ser útil para macro magia, pero entonces ¿por qué es esto una "característica" en un lenguaje moderno como Python?
¿Alguna vez ha usado la concatenación literal de cadenas en el código de producción?
Tuve un error como este pero tenía números en filas diferentes y la fila después de la coma faltada tenía un signo negativo, así que no obtuve un error de compilación. –
Creo que C++ 0x 'literales definidos por el usuario: http://public.research.att.com/~bs/C++0xFAQ.html#UD-literals –
Con el mismo espíritu, ¿qué pasa si se olvida de la '_s' después de los literales de cadena? – visitor