inline 함수
- 목적: 함수 호출 오버헤드를 줄여 프로그램 실행 속도를 높이기 위해 사용됨. 함수 호출 시 일어나는 매개변수 초기화, 실행 경로 점프 등의 비용을 절감함.
- 사용법: inline 키워드를 함수 앞에 붙이면 컴파일러가 해당 함수의 코드를 호출 위치에 직접 삽입함. 작은 함수나 자주 호출되는 단순한 연산에 적합함.
- 주의사항: 너무 많은 함수에 inline을 사용하면 코드 크기가 커져 메모리 사용량이 증가할 수 있으므로 신중하게 사용해야 함. 최신 컴파일러는 자동으로 인라인 가능 여부를 판단하므로 inline 키워드는 최소한으로 사용하는 것이 좋음.
inline int add(int a, int b) { return a + b; }
std::string
- 목적: C++에서 문자열을 보다 안전하고 효율적으로 다룰 수 있게 함. C 스타일 문자열보다 관리가 용이하고, 동적 메모리 할당을 통해 가변적인 문자열 길이를 처리할 수 있음.
- 초기화 및 할당: std::string name {"Alex"};처럼 선언 가능. std::string은 값을 직접 할당하여 변경 가능하며, 동적 메모리 할당 덕분에 더 작은 문자열로도 재초기화할 수 있음.
- 입력 문제: std::cin으로 문자열을 입력받을 때 공백 전까지만 읽기 때문에 std::getline()을 사용해 공백 포함 문자열을 읽는 것이 좋음. std::ws를 추가하여 공백이나 개행 문자를 무시할 수 있음.
std::getline(std::cin >> std::ws, name);
- 문자열 길이 확인: std::string.length()로 null 종료 문자를 제외한 문자열 길이를 반환함. C++20에서는 std::ssize(name)로도 길이를 가져올 수 있음.
std::string_view
- 목적: C++17에서 추가된 std::string_view는 문자열의 복사 없이 기존 문자열에 대한 읽기 전용 접근을 제공함. std::string의 초기화와 복사에 따른 성능 저하를 줄이고자 도입됨.
- 사용법: 기존의 std::string이나 C 스타일 문자열에 대한 참조를 제공하며 복사를 수행하지 않기 때문에 효율적임. 따라서 읽기 전용 매개변수로 사용할 때 적합함.
std::string_view str{"Hello, world!"};
- 주의사항: std::string_view는 문자열을 소유하지 않기 때문에, 참조하는 문자열이 삭제되면 std::string_view는 의미가 없게 됨. 이를 dangling view라 하며, 잘못된 동작을 유발할 수 있음. 예를 들어, std::string_view가 로컬 변수나 임시 문자열에 대한 view를 생성하면 해당 문자열이 삭제될 수 있음.
- 적합한 사용 사례:
- 읽기 전용 함수 매개변수: std::string_view를 함수 매개변수로 사용하면 복사 없이 문자열을 전달할 수 있음.
- 함수 반환값으로 사용: 전역적으로 존재하는 문자열 상수를 반환할 때 유용함.
void printString(std::string_view str) { std::cout << str << '\n'; }
std::string_view 문자열 수정 및 부분 문자열
- 부분 문자열 수정: std::string_view는 문자열의 하위 부분만 참조할 수 있도록 remove_prefix()와 remove_suffix() 메서드를 제공함. 원본 문자열을 수정하지 않고 뷰만 조정하는 방식임.
std::string_view str{"Peach"};
str.remove_prefix(1); // "each"
str.remove_suffix(2); // "ea"
- 하위 문자열 참조: 전체 문자열이 아닌 특정 부분만 참조할 수 있어 메모리 복사 없이 필요한 부분만 볼 수 있음. 다만, 하위 문자열이 null로 끝나지 않을 수 있어 주의가 필요함.