2.1.4 로우 문자열 리터럴
로우 문자열 리터럴(raw string literal)에서는 \t, \n과 같은 역슬래시를 통한 이스케이프 시퀸스를 일반 문자열로 취급한다.
string str = "Hello "World"!"; // 컴파일에러
만약, 문자열 리터럴을 위와같이 작성하면 컴파일 에러가 발생한다.
보통의 문자열에서 따옴표를 표현하려면 다음과 같이 이스케이프 시퀸스를 사용해야 한다.
string str = "Hello \ "World\"!";
로우 문자열 리터럴을 이용하면 이스케이프 시퀸스를 사용하지 않아도 된다.
로우 문자열 리터럴은 R"( 로 시작하고 )" 로 끝난다.
string str = R"(Hello "World"!)";
로우 문자열 리터럴은 여러줄에 걸쳐 작성될 수도 있다.
예를들어 다음과 같은 문자열 리터럴은 컴파일 에러가 발생한다.
string str = "Line 1
Line 2 with \t"; // 컴파일 에러
보통 문자열 리터럴은 여러줄에 걸쳐 있을 수 없기 때문이다.
로우 문자열 리터럴을 이용하면 다음과 같이 사용할 수 있다.
string str = R"(Line 1
Line 2 with \t)";
위의 로우 문자열 리터럴에서는 \t가 탭 문자로 교체되지 않는다. str 을 출력하면 다음과 같이 표시된다.
Line 1
Line 2 with \t
로우 문자열 리터럴이 )"로 끝나기 떄문에 문자열 안에 )"를 사용할 수 없다.
strign str = R"(The characters)" are embedded in this string)"; //컴파일 에러
문자열 중간에 )"를 포함하기 위해서 다음과 같은 확장 로우 문자열 리터럴을 사용해야 한다.
R"d-char-sequence(r-char-sequence)d-char-sequence"
위와같이 작성하면,
r-char-sequence 부분이 실제 로우 문자열이 된다. d-char-sequence 부분은 구분자 시퀸스 이다.
구분자는 로우 문자열의 시작과 끝에서 항상 동일해야 하며 최대 16문자로 구성할 수 있다.
이 구분자 시퀸스는 사용자가 직접 정해야 하고, 문자열 중간에 나오지 않을 시퀸스 여야 한다.
string str = R"-(The characters)" ahre embedded in this string)-"; // 컴파일 에러!
로우 문자열 리터럴은 데이터베이스 쿼리 문자열이나 정규 표현식 등을 사용할 때 발생하는 이스케이프 처리 문제로부터 프로그래머를 자유롭게 해준다.
'전문가를 위한 C++정리' 카테고리의 다른 글
3. 코딩 스타일 3.1 보기 좋은 코드의 중요성 3.1.1 ~ 3.1.2 (0) | 2024.01.13 |
---|---|
2. 문자열의 활용 2.1 동적 문자열 2.1.5 비표준 문자열 (0) | 2024.01.13 |
2. 문자열의 활용 2.1 동적 문자열 2.1.3 C++ string 클래스 (0) | 2024.01.12 |
2. 문자열의 활용 2.1 동적 문자열 2.1.2 문자열 리터럴 (0) | 2024.01.12 |
2. 문자열의 활용 2.1 동적 문자열 2.1.1 C스타일 문자열 (0) | 2024.01.12 |