C++로 ps하는 피붕이들이 바로 적용가능한 짤막한 C++ tip들을 가끔 적고 가려고 한다.

앞으로 꾸준히 적어볼까 하니까 잡설은 다음으로 미루고

오늘은 요 밑에 관련 글이 올라와서 이걸 적어볼까 한다.


배열의 길이를 구할 때 아래 코드처럼 배워서 사용하는 경우가 있을거다.


int arr[] = { 12, 11, 13, 5, 6, 7 };

int n = sizeof(arr) / sizeof(arr[0]);


왜냐하면 vector, list, array, map같은 STL 컨테이너들은 size() 멤버함수를 구현했는데

그냥 배열은 멤버함수가 없으니까 예전부터 저렇게 사용하거나 원소 개수를 함수 인자로 줄줄이 달고 다니는걸 봐왔다.


그런데 C++17 표준부터는 비멤버 size() 함수가 추가되었다.

그게 무슨 얘기냐 하면


int arr[] = { 12, 11, 13, 5, 6, 7 };

size(arr); // 이거 값이 6이라는 얘기다.


배열을 포인터로 전달해서 pointer decay가 발생하지 않은 경우는 이제 그 인자 개수를 size() 함수로 알 수 있다는 얘기


레거시 코드처럼 해도 되는데 그거 왜 필요하냐고?

우선, POD 타입 (sizeof로 크기를 알 수 있는 자료형) 이외의 자료형이 담긴 배열에서도 사용할 수 있다.

두번째 비멤버 함수 size()는 동일한 인터페이스로 일반 배열이건 vector건 map이건 동일하게 사용할 수 있다는거



결론


배열의 크기는

sizeof 함수로 직접 구현하지 말고 std::size() 함수를 사용하자.