string_literal — 문자열 리터럴

string_literal — 문자열 리터럴 (String literal)

**문자열 리터럴(string literal)**은 문자들의 시퀀스를 코드에 직접 적는 문법이에요. 큰따옴표 "로 감싼 형태예요.

C++은 여러 종류의 문자열 리터럴을 제공해요 (일반, 와이드, UTF-8/16/32, raw 문자열).

출처: cppreference

본문

문법 (Syntax)

"s-char-seq"                       // (1) 일반 (좁은) 문자열
R"d-char-seq( r-char-seq )d-char-seq"  // (2) raw 문자열
L"s-char-seq"                      // (3) 와이드 문자열 (wchar_t)
LR"..."                            // (4) 와이드 raw 문자열
u8"s-char-seq"                     // (5) UTF-8 문자열 (char)
u8R"..."                           // (6) UTF-8 raw 문자열
u"s-char-seq"                      // (7) UTF-16 문자열 (char16_t)
uR"..."                            // (8) UTF-16 raw 문자열
"hello"              // const char[6] — 널 종결 포함
L"hello"             // const wchar_t[6]
u8"hello"            // const char8_t[6] (UTF-8)
u"hello"             // const char16_t[6] (UTF-16)
U"hello"             // const char32_t[6] (UTF-32)

인접한 문자열 리터럴은 자동으로 합쳐져요.

const char* s = "Hello" " " "World";  // "Hello World"

raw 문자열 리터럴(C++11)은 이스케이프 시퀀스를 처리하지 않아서, 백슬래시와 따옴표를 그대로 쓸 수 있어요.

const char* re = R"(C:\Users\name\file.txt)";  // 그대로 저장
// 구분자(delimiter)로 괄호 충돌 방지
const char* s = R"tag((a)(b))tag";

문자열 리터럴은 배열 타입을 가지며, 널 문자(\0)로 종료돼요. sizeof("abc")는 4예요 (3글자 + 널).

std::string str = "C++";     // std::string으로 변환
const char* cstr = str.c_str();

접미사 리터럴을 쓰면 사용자 정의 타입의 문자열을 만들 수도 있어요 (사용자 정의 리터럴 참조).

using namespace std::literals;
auto s = "hello"s;   // std::string 리터럴

문자열 리터럴은 모든 C++ 프로그램에서 가장 널리 쓰이는 기본 요소예요. 인코딩 종류와 raw 문자열을 이해하면 국제화와 복잡한 텍스트 처리를 편하게 할 수 있어요.

더 알아보기 (Learn more)

cppreference