Me pregunto, porque los literales predefinidos como ULL
, f
, etc. obviamente se resuelven en tiempo de compilación. No parece que la estándar (2.14.8 [lex.ext]) para definir esto, pero parece que tienden hacia el tiempo de ejecución:¿Los literales definidos por el usuario se resuelven en tiempo de compilación o en tiempo de ejecución?
[2.14.8/2]
A definida por el usuario-literal se trata como una llamada al, un operador literal o plantilla de operador literal (13.5.8). A determine la forma de esta llamada para un literal definido por el usuario L con ud-sufijo X, literal-operador-id cuyo identificador de sufijo literal es X se busca en el contexto de L usando las reglas para nombre no calificado búsqueda (3.4.1). Deje S ser el conjunto de declaraciones encontradas por esta búsqueda. S no estará vacío.
(el énfasis es mío.)
Sin embargo, para mí esto parece introducir innecesaria en tiempo de ejecución por encima, como literales sólo pueden ser añadidos a los valores que están disponibles en tiempo de compilación de todos modos como 13.37f
o "hello"_x
(donde _x
es un literal definido por el usuario).
Luego, tenemos la plantilla definida por el usuario literal, que nunca se define realmente en la norma AFAICS (es decir, no se da ningún ejemplo, por favor, demuéstrame que estoy equivocado). ¿Es esa función de alguna manera invocada mágicamente en tiempo de compilación o todavía es tiempo de ejecución?
Gracias, me olvidé por completo de 'constexpr'. :) Y también gracias por ese párrafo. – Xeo
Buscar la terminación NUL parece sospechoso cuando le han entregado la longitud. –