C에서 빈 벡터와 벡터 크기 불일치
다음 코드를 고려하세요.
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // output 0 cout << value.size() - 1 << endl; // output 18446744073709551615 }
코드는 0을 인쇄합니다. 첫 번째 cout의 경우 예상대로 빈 벡터를 나타냅니다. 그러나 두 번째 출력에서는 큰 양수(18446744073709551615)가 인쇄됩니다. 직관적으로 예상할 수 있듯이 -1이 아닌 이유는 무엇입니까?
부호 없는 유형 이해
이 동작을 이해하려면 벡터 크기의 유형을 고려해야 합니다. 기능. vector::size()는 부호 없는 데이터 유형인 size_t 값을 반환합니다. 부호 없는 데이터 유형은 양수와 0만 나타낼 수 있습니다. 음수는 이러한 유형으로 표현할 수 없습니다.
빈 벡터의 크기에서 1을 빼면 예상대로 -1 값을 얻습니다. 그러나 size_t가 부호가 없기 때문에 -1 값은 이 데이터 유형이 나타낼 수 있는 가장 큰 양수 값(이 경우 18446744073709551615)으로 오버플로됩니다.
따라서 두 번째 cout 문은 이 오버플로의 결과를 표시합니다. 예상보다 -1 값입니다.
위 내용은 C의 빈 벡터 크기에서 1을 빼면 -1 대신 큰 양수가 나오는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!