기본 콘텐츠로 건너뛰기

C++11 auto string types

auto key1 = "Hello, world!"; // char*
char key2[] = "Hello, world!"; // char array included null-terminate
auto key3[] = "Hello, world!"; // ERROR!
auto key4 = {"Hello, world!"}; // std::initialize_list<char const* const>
auto key5 = {'H','e','l','l','o',',',' ','w','o','r','l','d','!'}; // std::initialize_list<char const>
char key6[] = {'H','e','l','l','o',',',' ','w','o','r','l','d','!'}; // std::initialize_list<char const>


오랜만에 쓰면 헷갈리니까 기록하는 차원에서, C++11에서 스트링을 auto로 받았을 때 어떤 형태로 되는지 테스트 해봤다.

key1은 char[]를 예상했지만, char*로 받더라. sizeof(key1)하면 8(64bit)을 뱉는다.

key2는 당연히 char[]이지만, "Hello, world!\0"까지 계산해서, sizeof(key2)하면 14를 뱉는다.

key3는 아쉽게도 GCC 5.0에서 컴파일 에러를 뿜어낸다.

key4는 initialize_list<>객체를 받는데, 내부에 포인터가 2개인가보다. 16을 뱉는다.

key5 역시 initialize_list<>객체인데, key4 다른 타입이다. 역시 16을 뱉는다.

key6 는 당연하게도 char[13]이고, 13을 뱉는다.

sizeof랑 같이 섞어 쓰고 싶었는데, 귀찮네...

댓글

이 블로그의 인기 게시물

탐색기에서 OneDrive 이 2개로 보이는 문제

왜 2개가 보이는지 모르겠지만, Registry 삭제하면 됨 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace 하위 키에서 OneDrive 둘 중에 하나만 지워도 바로 반영됨. 참조:  https://answers.microsoft.com/en-us/msoffice/forum/all/duplicate-onedrives-in-file-explorer/49c935a6-287b-43a5-aed5-2dee2a1c1b22

절전을 깨운 녀석 알아내기

가끔씩 윈도우 절전을 깨우는 녀석이 있는데, 보통은 USB Keyboard/Mouse 이다. 요런 녀석들은 장치관리자에서 "이 장치를 사용하여 컴퓨터의 대기 모드를 종료할 수 있음"을 꺼주면 된다. 그래도 가끔씩 알 수 없는 이유로 켜졌을 경우, 관리자 권한으로 커맨드 창 열고 확인한다. C:\> powercfg -lastwake 절전 모드 해제 기록 카운트 - 1 절전 모드 해제 기록[0] 절전 모드 해제 소스 카운트 - 1 절전 모드 해제 소스[0] 종류: 장치 인스턴스 경로: XXX 이름: YYY 설명: ZZZ 제조업체: AAA