트라이 그래프가 떨어졌습니다.
소스 파일은 구현 정의 방식으로 표준에 정의 된 소스 문자 집합에 매핑 되는 물리적 문자 집합 으로 인코딩됩니다 . 기본적으로 소스 문자 집합에 필요한 모든 구두점이없는 일부 물리적 문자 집합의 매핑을 수용하기 위해 언어는 덜 일반적인 구두점 문자 대신 사용할 수있는 세 개의 일반적인 문자 시퀀스 인 삼중 문자를 정의했습니다. 이를 처리하려면 전처리 기와 컴파일러가 필요했습니다.
C ++ 17에서는 삼중 문자가 제거되었습니다. 따라서 일부 소스 파일은 물리적 문자 집합에서 소스 문자 집합에 일대일로 매핑되는 다른 물리적 문자 집합으로 먼저 변환되지 않는 한 최신 컴파일러에서 허용되지 않습니다. (실제로 대부분의 컴파일러는 삼중 문자의 해석을 선택 사항으로 설정했습니다.) 이것은 미묘한 동작 변경은 아니지만 이전에 허용 된 소스 파일이 외부 번역 프로세스없이 컴파일되는 것을 방지하는 주요 변경 사항입니다.
더 많은 제약 char
표준은 또한 구현이 정의 된 실행 문자 집합을 참조 하지만 최소한 전체 소스 문자 집합과 적은 수의 제어 코드를 포함해야합니다.
char
실행 문자 집합의 모든 값을 효율적으로 표현할 수있는 부호없는 정수 형식으로 정의 된 C ++ 표준 입니다. 언어 변호사의 표현을 통해 a char
는 8 비트 이상이어야 한다고 주장 할 수 있습니다 .
구현에서에 대해 부호없는 값을 사용하는 경우 char
0에서 255까지의 범위가 될 수 있으므로 가능한 모든 바이트 값을 저장하는 데 적합합니다.
그러나 구현에서 부호있는 값을 사용하는 경우 옵션이 있습니다.
대부분은 2의 보수를 사용 char
하여 -128에서 127 사이의 최소 범위를 제공 합니다. 이는 256 개의 고유 한 값입니다.
그러나 또 다른 옵션은 부호 + 크기로, 한 비트는 숫자가 음수인지 여부를 나타 내기 위해 예약되고 다른 7 비트는 크기를 나타냅니다. 이는 char
-127에서 127까지의 범위를 제공 하며, 이는 255 개의 고유 값에 불과합니다. (0을 나타내는 유용한 비트 조합 하나를 잃기 때문입니다.)
나는 확실히위원회는 지금까지 명시 적 결함으로이 지정 아니지만, 당신은에서 왕복을 보장하기 위해 표준에 의존 할 수 없기 때문에 그것은이었다 unsigned char
에 char
다시 원래 값을 유지한다. (실제로 모든 구현은 부호있는 정수 유형에 대해 모두 2의 보수를 사용했기 때문에 수행되었습니다.)
최근에야 (C ++ 17?) 라운드 트립을 보장하기 위해 문구가 수정되었습니다. 에 대한 다른 모든 요구 사항과 함께이 수정은 명시 적으로 말하지 않고 char
부호에 대한 2의 보수를 효과적으로 요구 char
합니다 (표준이 다른 부호있는 정수 유형에 대해 부호 + 크기 표현을 계속 허용하더라도). 모든 부호있는 정수 유형이 2의 보수를 사용하도록 요구하는 제안이 있지만 C ++ 20으로 만들 었는지 기억 나지 않습니다.
따라서 이것은 이전에 잘못된 지나치게 주제 넘은 코드에 소급 수정을 제공하기 때문에 찾고있는 것과 반대입니다 .