C의 옛날에는 부울 유형이 없었습니다. 사람들은 int
부울 데이터를 저장하기 위해를 사용 했으며 대부분 작동했습니다. 0은 거짓 이었고 다른 모든 것은 사실이었습니다.
이것은 당신이 int flag = 0;
나중에 가져 가면 flag++
가치가 사실 이라는 것을 의미했습니다 . 이것은 플래그 값이 무엇이든 관계없이 작동 합니다 (많이하지 않으면 롤오버하고 0으로 돌아 왔지만 무시할 수 있습니다) -값이 1 일 때 플래그를 늘리면 2가됩니다. 참된.
어떤 사람들은 이것을 무조건 부울 값을 true로 설정하기 위해 사용했습니다. 나는 그것이 관용어 가 된 것이 확실하지 않지만 일부 코드 에서는 확실하지 않습니다 .
이를 위해 일한 적이 --
값이 (가 할 수있는) 1 이외 인 경우, 값은 여전히 거짓되지 않을 것 때문에. 그리고 이미 거짓 ( 0
)이고 감소 연산자를 사용했다면 거짓으로 유지되지 않습니다.
초기에 C에서 C ++로 코드를 옮길 때 C ++에 포함 된 C 코드가 여전히 작동 할 수 있어야했습니다. 따라서 C ++ 사양 (섹션 5.2.6 (페이지 71))에서 다음과 같이 읽습니다.
접미사 ++를 적용하여 얻은 값은 연산자를 적용하기 전에 피연산자가 가진 값입니다. [참고 : 획득 한 값은 원래 값의 사본입니다.] 피연산자는 수정 가능한 lvalue 여야합니다. 피연산자의 유형은 산술 유형이거나 완전한 객체 유형에 대한 포인터입니다. 결과가 표시된 후, 오브젝트 유형이 아닌 경우 오브젝트 값이 1로 추가되면 오브젝트 값이 1로 추가되어 오브젝트 값이 수정됩니다 bool
. [참고 :이 사용은 더 이상 사용되지 않습니다. 부록 D 참조]
postfix의 피연산자는 피연산자가 유형이 아닌 것을 제외하고 postfix ++ 연산자와 유사하게 감소합니다 bool
.
이것은 섹션 5.3.2에서 다시 언급됩니다 (접두사 연산자의 경우-5.2.6은 접미사에 있음).
보시다시피, 이것은 더 이상 사용되지 않으며 (문서의 부록 D, 709 페이지) 사용해서는 안됩니다.
그러나 그 이유입니다. 때로는 코드가 표시 될 수도 있습니다. 하지만하지 마십시오.