profile
gamedev stuff

std::cin과 getline()을 섞어쓸 때 주의점

개행문자('\n')를 읽느냐 마느냐가 다르다! > 1. std::cin >> 은 '\n' 직전까지만 읽는다. (버퍼에 '\n'이 남아있음) > 2. getline()은 '\n'까지 읽고, '\n'을 버린 문자열을 저장한다. > 3. 따라서, 그냥 1 -> 2 순서로 사용하면 2에서 빈 문자열을 저장하게 되니, > 사용 직전에 std::cin.ignore(4096, '\n'); or std::cin >> std::ws; 를 써주자. > (사실 4096 대신 이렇게 긴 걸 적어주는 게 정석.) getline()은 아래 2가지가 있는데, 둘 다 위 설명처럼 작동한다. [std::cin.getline(char*, std::streamsize)](https://en.cppreference.co

2022년 2월 8일
·
0개의 댓글
·
post-thumbnail

전역 상수를 헤더에 넣어보자!

헤더 파일에 전역 상수를 넣고 여기저기서 참조하는 접근법 3가지! > 1. inline constexpr T (C++17) > 2. extern const T(선언) + 따로 정의 > 3. const T and constexpr T 비슷한듯 미묘하게 다르다. 특히, non-static 인 constexpr 변수는 inline 이 아니다! 참고로 순서는 g++ -std=c++17 main.cpp ham*.cpp 기준으로, 출력 파일의 용량이 작은 순서다. | 전역 상수 | 출력물 용량 | |:---|:---| | inline constexpr T (C++17) | 16,664 bytes | | extern const T(선언) + 따로 정의 | 16,696 bytes | | const T and constexpr T | 16,744 bytes | `const

2022년 2월 5일
·
0개의 댓글
·
post-thumbnail

vcpkg로 C++ 오픈소스 라이브러리 간단 설치하기 (feat. Manifest mode)

vcpkg 가 업데이트되어 프로젝트별로 의존성을 관리할 수 있게 됐다. vcpkg 를 처음 접하는 사람도 있을테니, (사실 필자도 처음이다.) 개요와 설치법부터 사용까지 간단히 다루겠다. vcpkg란? vcpkg 는 Microsoft 에서 시작된 오픈소스 C/C++ 패키지 매니저다. C++ 라이브러리를 간단히 설치하고 링크할 수 있게 만들어졌다. 파이썬의 pip, Node.js 의 npm, Rust 의 cargo 등과 비슷한 기능을 한다. 운영체제는 Windows, Linux, macOS 를 지원한다. 빌드 시스템은 MSBuild 와 CMake 를 지원하고, 다른 빌드 시스템과도 부분적으로 호환된다. 내부적으로 라이브러리의 소스코드를 다운받아서 직접 컴파일하는 방식을 사용한다. 왜 미리 빌드된 바이너리를 제공하지 않는지가 궁금하다면 [이 영상](https://www.youtube.com/watch?v=3vXOKkv3ND

2022년 2월 5일
·
0개의 댓글
·