반응형
안녕하세요! 드디어 이번 포스팅으로 2장까지 마무리 짓게 되었습니다.
아직 갈길은 멀지만 열심히 해보겠습니다.
2021.08.25 - [C++] - [C++] 동적 스트링 Part 2
이전 포스팅 참고하시고 이번 포스팅에서는 std::string_view 클래스에 대해서 알아볼게요!
2.1.4 std::string_view 클래스 (C++17)
- 이 클래스는 std::basic_string_view 클래스 템플릿의 인스턴스로 헤더에 정의되어 있다.
- const string& 대신 사용할 수 있으며 오버헤드가 없다. 즉, 스트링을 복사하지 않음.
- data()는 제공하지만 c_str()은 제공하지 않는다.
- remove_prefix(size_t) & remove_suffix(size_t) 메서드 제공 : offset 만큼 스트링 축소 기능
- string와 string_view를 서로 연결(결합)할 수 있다.
string str = "hello";
string_view sv = " world!";
auto result = str + sv.data(); // 연결 OK
- 다음 예제는 주어진 파일명에 확장자만 추출한다.
// 파일의 확장자 명만 추출하는 func.
string_view extractExtension(string_view fileName){
return fileName.substr(fileName.rfind('.'));
}
// 모든 종류의 스트링에 적용 가능!
string fileName = R"(c:\temp\my file.exe)";
cout << "C++ string: " << extractExtension(fileName) << endl;
const char* cString = R"(c:\temp\my file.exe)";
cout << "C string: " << extractExtension(cString) << endl;
cout << "Literal: " << extractExtension(R"(c:\temp\my file.exe)") << endl;
- string_view를 사용한다고 해서 string이 생성되는 것은 아니다.
- string 생성자를 직접 호출 또는 string_view::data()로 생성해야 한다.
void handleExtension(const string& extension) { /* ... */ }
// 동작 x
handleExtension(extractExtension("my file.exe"));
// 동작 o
handleExtension(extractExtension("my file.exe").data()); // data() 메서드
handleExtension(string(extractExtension("my file.exe"))); // 명시적 ctor
std::string_view 리터럴
- 표준 사용자 정의 리터럴인 'sv'를 사용하면 스트링 리터럴을 std::string_view로 만들 수 있음
auto sv = "My string_view"sv;
// sv를 사용하려면
// using namespace std::string_view_literals; 또는
// using namespace std; 를 적어줘야 함
2.1.5 비표준 스트링
- C++ 스트링을 잘 사용하지 않는 이유?
- C++ 규격에 명확히 나오지 않기 때문에 string이라는 타입이 있는 줄도 모르는 경우가 있다.
- 별로 만족스럽지가 않아서 원하는 형태로 스트링 타입을 직접 지정하는 경우도 있다.
- 가장 큰 이유는 마이크로소프트 MFC의 CString 클래스처럼 개발 프레임워크나 운영체제에서 나름대로 정의한 스트링을 제공해주기 때문이다.
- 스트링과 관련되어서 명심해야 할 점
- C 스타일 스트링은 사용하지 않는다.
- MFC or QT에서 제공하는 스트링처럼 현재 사용하는 프레임워크에서 제공하는 스트링을 프로젝트의 표준 스트링으로 삼는다.
- std::string으로 스트링을 표현한다면 함수의 매개변수로 전달할 읽기 전용 스트링은 std::stirng_view로 지정.
- 다른 방식으로 표현한다면 현재 프레임 워크에서 제공하는 string_view와 유사한 기능을 활용
2.2 요약
- C++에서 제공하는 string과 string_view 클래스 소개
- C 스타일에 비해 어떤 장점이 있는지 살펴봄
- 숫자와 string을 쉽게 변환하는 헬퍼 함수, 로 스트링 리터럴 개념
- 다음장에서는 코드 문서화, 코드 분할, 명명 규칙, 코드 포매팅을 포함한 코딩 스타일 가이드라인 소개
다음 포스팅에서는 3장입니다!
감사합니다~
반응형
'🌈 프로그래밍 > C++' 카테고리의 다른 글
[C++] 전문가다운 디자인이란? (2) | 2021.08.30 |
---|---|
[C++] 코딩 스타일에 대하여 (2) | 2021.08.29 |
[C++] 동적 스트링 Part 2 (0) | 2021.08.25 |
[C++] 동적 스트링 Part 1 (2) | 2021.08.24 |
[C++] 직원 관리 프로그램 만들기 (2) | 2021.08.23 |