프로그래밍 공부
작성일
2024. 1. 13. 18:58
작성자
WDmil
728x90

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)-"; // 컴파일 에러!

 

로우 문자열 리터럴은 데이터베이스 쿼리 문자열이나 정규 표현식 등을 사용할 때 발생하는 이스케이프 처리 문제로부터 프로그래머를 자유롭게 해준다.

 

728x90