2017-03-06 2 views
2

C++에서 프라이머 책을 설정 내장 부분은 유형 말한다 원시적 :기계의 기본 문자에,

char는 기계의 기본 문자의 문자에 해당하는 숫자 값을 저장하기에 충분히 큰 것으로 보장된다

세트. 즉, char은 단일 시스템 바이트와 동일한 크기입니다.

이 기본 문자가 ASCII 테이블을 참조합니까?

+2

경우 일 수 있습니다. ASCII 일 필요는 없습니다. EBCDIC처럼 다른 세트가 있습니다 – NathanOliver

+3

대부분의 최신 컴퓨터에서 그렇습니다. 다른 컴퓨터에서 사용할 수있는 다른 문자 집합이 있지만 점점 희귀하고 전문화되어 있습니다. – abelenky

+1

"컴퓨터의 기본 문자 집합"은 실제로 아무 의미가 없습니다. C++ 컴파일러/라이브러리 공급 업체에게 달려 있습니다. 그냥 읽고 "소스 문자 집합"및 "실행 문자 집합"이라는 용어를 찾아보십시오. –

답변

2

표준은 기본 문자 집합이 ASCII로되어 있다고 보장하지 않습니다. 사실 EBCDIC과 같은 특정 시스템에는 다른 문자 세트가 존재하지만 여전히 존재합니다.

만 보장 바이트

1.7 C++ 메모리 모델의 C++ 메모리 모델 [intro.memory]
1 기본 저장 장치를

되어있다. 바이트는 최소한 기본 실행 문자 집합 (2.3)의 구성원과 유니 코드 UTF-8 인코딩 형식의 8 비트 코드 단위를 포함 할 수있을만큼 커야하며 인접한 비트 시퀀스, 이것은 구현으로 정의됩니다. 최하위 비트를 하위 비트라고합니다. 최상위 비트는 상위 비트라고합니다. C++ 프로그램에서 사용할 수있는 메모리는 하나 이상의 인접 바이트 시퀀스로 구성됩니다. 모든 바이트에는 고유 한 주소가 있습니다.

1.8 C++ 객체 모델 [intro.object]
...
5는 비트 필드 (96)와, 가장 파생 개체 0이 아닌 크기를 가지며, 하나 이상의 을 차지한다가 아닌 바이트의 저장 공간.

2.3 문자 세트 [lex.charset]
... 위의 위의 0에서 각 문자의 값은 이전 값보다 큰 값이어야합니다.

따라서 C++ 표준은 char에 적어도 8 비트가 있고 숫자 코드에 연속 값이 있음을 보장합니다. 다른 모든 문자 집합 속성은 구현에 따라 다릅니다.

+0

부연 설명 : §1.7 ¶1은 바이트가 적어도 8 비트임을 보장합니다. §1.8¶5는 "대부분의 파생 된 객체"가 적어도 1 바이트를 차지할 것임을 보장합니다. 비 관련 클래스 유형의 객체 (예 :'char')가 "대부분의 파생 객체"의 정의에 포함되어 있다고 말하는 §1.8¶4와 관련이 있습니다. 그러나 §2.3이 어떻게 관련이 있는지는 잘 모르겠습니다. – knatten