std::ptrdiff_t

42_Cursus·2022년 5월 16일
0

CPP

목록 보기
5/10

ptrdiff_t

Defined in header <csddef>
ptrdiff_t is the signed integer type of the result
of subtracting two pointers.
-cppreference-

std::ptrdiff_t는 컨테이너에서 typedef 인 difference_type과 같다.
std::ptrdiff_t est egale a "difference_type" dans containers c++.


example de code:


#include <cstddef>
#include <iostream>
int main()
{
    const std::size_t N = 10;
    int* a = new int[N];
    int* end = a + N;
    for (std::ptrdiff_t i = N; i > 0; --i)
        std::cout << (*(end - i) = i) << ' ';	// ptrdiff_t 의 사용

	int *a1 = &a[18];
	int *a2 = &a[23];

	std::cout << std::endl;
	std::cout << "a2 - a1 : " << a2 - a1 << std::endl;

    delete[] a;

	std::cout << sizeof(long) << std::endl;
	std::cout << sizeof(std::ptrdiff_t) << std::endl;
	std::cout << PTRDIFF_MAX << std::endl;
	std::cout << LONG_MAX << std::endl;


	return (0);
}


10 9 8 7 6 5 4 3 2 1
a2 - a1 : 5
8
8
9223372036854775807
9223372036854775807

Pourquoi "std::ptrdiff_t", pas de "long int" ?

long int 대신에 std::ptrdiff_t를 사용하는 이유는?
Pourquoi "std::ptrdiff_t" est utilisé au lieu de "long int"?

int는 64비트 시스템에 충분하지않습니다. ptrdiff는 항상 올바른 크기입니다.
즉, long int가 여전히 32비트인 64비트 시스템이 있다. (window x64)
62bits n'est pas suffisants dans le système 62bits. ptrdiff est toujours correct.
En d'autres thermes, il y a le système 64bits qui a "long int en 32 bits".

Pourquoi "std::ptrdiff_t", pas de "size_t" ?

std::ptrdiff_t est unsigned value. mais size_t est signed value.
donc, on peut éviter "overflow".

profile
etudiant_42

0개의 댓글