간단한 질문이 있습니다. strlen()
과 같은 문자 수를 0으로 끝내는 방법이 있습니까 char16_t
배열이 끝났습니까?C++ 11 char16_t strlen 동등한 함수
11
A
답변
18
사용
char_traits<char16_t>::length(your_pointer)
는 21.2.3.2 struct char_traits<char16_t>
및 표 C++ 11-STD 62 참조.
1
포인터를 사용하여 :) 시작 부분에 대한 중복 포인터를 만든 다음 while (*endptr++);
을 반복하면 그 길이는 endptr - startptr
입니다. 그러나 실제로 템플릿을 만들 수는 있지만, 가능한 컴파일은 strlen
(다른 크기의 ofc)에서 수행하는 것과 동일한 내장 코드를 생성하지 않습니다.
비록 매우 짧은 것이지만,보기 흉하게 보입니다 ... BTW 나는 strlen이나 wstrlen에 과부하가 없다는 것을 당신의 코드에 모욕하지 않습니다. – NoSenseEtAl
@NoSense : 만약 당신이 MS 나 GCC 용 CRT 소스를 보았을 때 strlen 외에도이 방법을 사용하는 것을 볼 수 있습니다. Ofc는 SSE 4.1 문자열 명령이나 오래된 REP SCAS와 같은 어셈블리 레벨만큼 빠르지 만 본질은 무엇인지에 대한 것이므로) sse 기반 버전에 대한 기사가 있습니다 (gcc에는 몇 가지 변형이 있습니다). 그러나 이것은 당신의 하드웨어를 제한합니다. – Necrolis
사실 저는 GCC를 사용하고 있습니다. gcc는 asm 항목 주위에 래퍼 함수를 가지고 있습니다. 내 말은 __wstrlen (const char16_t * str)과 같은 것을 의미합니다. – NoSenseEtAl