size_tvsint in C++ 및/또는 C
C++ 에서 A 를 합니까를 는 무엇입니까?size_type
int
? 만약 우리가 스스로 구조물을 만들고 있다면, 우리는 또한 다음과 같이 사용하도록 권장되어야 합니다.size_type
?
으로.size_t
어떤 것의 크기를 측정할 때마다 사용해야 합니다.입니다는 합니다.size_t
~ 0과 0합니다 합니다.SIZE_MAX
sSIZE_MAX
필요한 건 65,535...
C++와 C 표준의 다른 흥미로운 제약 조건은 다음과 같습니다.
sizeof()
이다.size_t
부호가 없는 정수입니다.operator new()
다로 합니다.size_t
size_t
됩니다에 되어 있습니다.<cstddef>
SIZE_MAX
됩니다에 되어 있습니다.<limits.h>
C99에는 있지만 C++98에는 언급되어 있지 않습니까?!size_t
기본 정수 유형 목록에 포함되지 않기 때문에 항상 다음과 같이 가정해 왔습니다.size_t
는 기본 중 입니다에 별칭입니다.char
,short int
,int
,그리고.long int
.
수를 를 .size_t
를 size_t
이것은 C++가 사용해왔던 것으로 보이기 때문입니다.어떤 경우에도, 당신은 사용하고 싶지 않을 것입니다.int
의 쓰임새라도 --unsigned long
아니면unsigned long long
TR1을 사용하는 경우 또는...더 좋은...typedef
하든지 간에size_type
아니면 그냥 포함하기<cstddef>
합니다.std::size_t
.
다음과 같은 몇 가지 이유가 있습니다.
- 유형(size_t)은 해당 플랫폼에서 부호 없는 가장 큰 정수로 정의할 수 있습니다.예를 들어, 32비트 정수 또는 64비트 정수 또는 긴 길이의 부호 없는 값을 저장할 수 있는 다른 것으로 정의될 수 있습니다.
- 프로그램을 읽을 때 값이 단순히 "정규" 인텐트가 아닌 크기임을 분명히 하는 것.
만약 당신이 당신만을 위한 그리고/또는 버려지는 앱을 쓴다면, 당신은 아마도 기본적인 int를 사용해도 무방할 것입니다.라이브러리나 중요한 것을 쓰고 있다면 size_t가 더 나은 방법일 것입니다.
어떤 대답들은 필요 이상으로 복잡합니다.size_t는 메모리에 있는 모든 개체의 크기를 바이트 단위로 저장할 수 있을 정도로 충분히 크다는 것이 보장되는 부호 없는 정수 유형입니다.실제로는 포인터 유형과 항상 같은 크기입니다.32비트 시스템에서는 32비트입니다.64비트 시스템에서는 64비트입니다.
stl 의가 .를 들면,면,value_type
이며는size_type
저장된 번호 유형입니다.이러한 방식으로 컨테이너는 플랫폼과 구현에 기반하여 완전히 일반적입니다.
를 생성하는 를 .size_type
일반적으로 이런 일들이 이루어지는데요
typedef std::size_t size_type;
컨테이너 크기를 원하면 다음과 같이 적어야 합니다.
typedef vector<int> ints;
ints v;
v.push_back(4);
ints::size_type s = v.size();
좋은 점은 나중에 목록을 사용하려면 유형 디프를 다음으로 변경하면 됩니다.
typedef list<int> ints;
그리고 그것은 여전히 작동할 것입니다!
"size_t"를 의미한다고 가정합니다. 이것은 부호가 없는 정수(양만 있을 수 있고 음수는 될 수 없는 정수)를 나타내는 방법입니다. 크기가 -7인 배열은 사용할 수 없으므로 컨테이너 크기에 적합합니다.size_t를 사용해야 한다고 말하지는 않지만 "여기 이 숫자는 항상 양수입니다"라는 코드를 사용하여 다른 사람에게 표시됩니다.또한 더 큰 양의 값 범위를 제공하지만, 매우 큰 용기가 없는 한 중요하지 않을 수 있습니다.
C++는 다양한 하드웨어 아키텍처와 플랫폼에서 구현될 수 있는 언어입니다.시간이 지남에 따라 16비트, 32비트 및 64비트 아키텍처 등을 지원하게 되었습니다.size_type
기타 유형 별칭은 라이브러리가 구현 세부 정보로부터 프로그래머/코드를 절연하는 방법입니다.
size_type
는 32비트 시스템에서 32비트를 사용하고 64비트 시스템에서 64비트를 사용합니다. 필요한 경우 size_type을 사용했다면 동일한 소스 코드가 더 잘 작동할 수 있습니다.다와 할 수 .unsigned int
건
size_type
STL 컨테이너의 용량을 표현하기 위해 사용됩니다.size_t
C/C++하는 데 됩니다.
int는 사양에서 4바이트가 보장되지 않으므로 신뢰할 수 없습니다.예, int보다 size_type이 선호됩니다.
size_t
부호가 없기 때문에 둘 다 32비트라고 해도 부적격 int와 같은 의미는 아닙니다.왜, 오늘날sizeof (size_t) == sizeof (int) == sizeof (long)
, 어떤 타입을 선택할지는 당신에게 달려있습니다.이러한 관계는 표준에 의해 보장되지 않으며 64비트 플랫폼이 도입됨에 따라 빠르게 구식이 되고 있습니다.
일 수 를 들어, "" 이고을 으로하십시오.size_t
좋은 선택이 될 겁니다
void f1(size_t n) {
if (n <= myVector.size()) { assert(false); }
size_t n1 = n - myVector.size(); // bug! myVector.size() can be > n
do_stuff_n_times(n1);
}
void f2(int n) {
int n1 = n - static_cast<int>(myVector.size());
assert(n1 >= 0);
do_stuff_n_times(n1);
}
f1 ()와 f2 () 모두 동일한 버그를 가지고 있지만 f2 ()에서 문제를 감지하는 것이 더 쉽습니다.좀 더 복잡한 코드의 경우, 서명되지 않은 정수 산술 버그는 식별하기가 쉽지 않습니다.
개인적으로 저는 서명되지 않은 int를 사용하지 않는 한 모든 사이즈에 서명된 int를 사용합니다.저는 제 사이즈가 32비트 부호의 정수에 맞지 않는 상황을 겪어본 적이 없습니다.저는 아마 비부호 32비트 정수를 사용하기 전에 64비트 부호 정수를 사용할 것입니다.
가 있는 입니다입니다.static_cast
size_t
.int
자네 코드대로
언급URL : https://stackoverflow.com/questions/994288/size-t-vs-int-in-c-and-or-c
'code' 카테고리의 다른 글
개발 서버 없이 장치에 서명되지 않은 apk를 빌드하고 설치하시겠습니까? (0) | 2023.10.15 |
---|---|
Wordpress REST API 사용자 지정 테이블을 사용하는 사용자 지정 끝점 생성 (0) | 2023.10.15 |
PowerShell로 응용프로그램 실행 및 완료될 때까지 기다립니다. (0) | 2023.10.15 |
Oracle - 인덱스를 만들거나 열을 추가한 후 통계를 계산해야 합니까? (0) | 2023.10.15 |
포인터를 리터럴(또는 상수) 문자 배열( 문자열)로 되돌리기? (0) | 2023.10.15 |