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 문자열을 이해하면 국제화와 복잡한 텍스트 처리를 편하게 할 수 있어요.