2014-11-07 6 views
1

16 비트의 정수 데이터 및 문자 데이터가 이제는 구분 가능하지만 8 비트의 정수 및 문자 데이터는 그렇지 않으므로 "설계가 마음에 들지 않는다"와 같이 보입니다.왜 wchar_t/unsigned short가 이제 별개이지만 char/unsigned 바이트 구분이 없습니까?

C++은 8 비트 값 'char'에 대해 항상 유일한 선택이었습니다. 그러나 wchar_t를 부호없는 short와 공식, 고유 한 유형으로 인식하면 향상된 기능을 사용할 수 있지만 넓은 문자열 사용자의 경우에만 사용할 수 있습니다. 이것이 조정되지 않은 것 같습니다. 언어는 8 비트 및 16 비트 값에 대해 다르게 작동합니다.

더 명확한 유형이 있으면 분명 가치가 있다고 생각합니다. 별개의 8 비트 char AND 및 8 비트 "byte"를 사용하면 훨씬 더 좋을 것입니다. 연산자 오버로딩 사용법. 예를 들면 : 당신이 좁거나 넓은 문자열을 사용하는 경우에 관계없이 더 유사하게 동작보다 지능적인 과부하 및 과부하를 활성화 것이다 도입 된 새로운 8 비트 정수 타입이 있다면

// This kind of sucks... 
BYTE m = 59;  // This is really 'unsigned char' because there is no other option 
cout << m;  // outputs character data ";" because it assumes 8-bits is char data. 
       // This is a consequence of limited ability to overload 

// But for wide strings, the behavior is different and better... 
unsigned short s = 59; 
wcout << s;  // Prints the number "59" like we expect 
wchar_t w = L'C' 
wcout << w;  // Prints out "C" like we expect 

는 언어는 일관성을 것입니다 .

+5

'wchar_t'가 16 비트 일 필요는 없다고 말하면 마음이 아프겠습니까? 아니면 확실하게'CHAR_BIT == 8' 환경에서 2 바이트가 될까요? –

+4

또는'wchar_t' /'unsigned short'는 항상 구별되어 있습니까? –

+0

나는 wchar_t가 얼마나 넓은 지 상관하지 않는다고 생각한다. 요점은 char와는 달리 정수와 혼동 될 수 없다는 것이다. 또한 char16_t 및 char32_t도 중요합니다. – VoidStar

답변

2

예, 아마,하지만 문자가없는 단일 바이트 정수를 사용하는 것은 매우 드문 당신은 사소 (단항 +을 적용하는 시도하고 무슨 일이 일어 나는지) 통합 추진을 통해 정해진 문제를 해결 얻을 수 있습니다.

그것은 당신의 전제가 결함이 있음도 주목할 필요가 : wchar_tunsigned short는 C++ 98 항 3.9.1/5 당, C++ 03, C++ (11)와 C++ (14) 항상되어 가지 유형이있다.

+1

오늘은 16 진수로 몇 바이트를 출력하고 웃는 얼굴과 이상한 문자의 텍스트 파일을 보았습니다. –

+0

@NeilKirk : 예, 가끔 있습니다. 새로운 타입을 보증하기에 충분하지 않거나 충분히 큰 피해를 입지 않는다면, 나는 새로운'byte' 키워드로 역 호환성의 악몽을 상상할 수 있겠습니까?'byte_t' 아마도 그렇 겠지만 왜 그런가? 'char'와 같고 이것은 끔찍한 것입니다.) ... 예, 나는 괄호 안에 몇 가지 이유를 발견했습니다. 그리고 그 외에도 언어에 뭔가를 추가해야 할 아주 좋은 이유가 있습니다. 다른 방법은 아닙니다. 비록 이것이 아직 제안되지 않았다면 나는 놀랄 것이다. 요점은 여기서 답할만한 질문이 없다는 것입니다. –

+1

문제는 정수형이 템플릿 매개 변수이고 정수를 스트림으로 출력하려고하는 경우입니다. 나는 그들에게 +를 붙일 수 있다고 생각한다. –