2011-04-28 13 views

Respuesta

1

Utilice los punteros :), cree un puntero duplicado al inicio, luego repáselo while (*endptr++);, luego la longitud está dada por endptr - startptr. En realidad, puede crear una plantilla, sin embargo, es posible que la compilación no genere el mismo código intrínseco para strlen (para diferentes tamaños de c).

+0

ouch, que se ve feo, aunque es muy, muy corto ... Por cierto, no estoy insultando tu código, es extraño que no haya sobrecarga para strlen o wstrlen ... – NoSenseEtAl

+1

@NoSense: si has si alguna vez miró la fuente de CRT para MS o GCC, verá que usan este método para strlen et al. Ofc no es tan rápido como el nivel de ensamblaje, como las instrucciones de cadena SSE 4.1 o el buen viejo 'REP SCAS', pero para eso son intrínsecos;) hay artículos en versiones basadas en sse (el gcc incluso tiene algunas variantes). pero esto restringe tu hardware – Necrolis

+0

Ok, genial, de hecho, estoy usando GCC. ¿Tiene gcc alguna función de envoltura alrededor de cosas asm? Me refiero a algo como __wstrlen (const char16_t * str) – NoSenseEtAl