cppreference.com
"-s- ()"
|
(1) | ||||||||
R"-d- ()(-r- ())-d- ()"
|
(2) | ( C++11) | |||||||
L"-s- ()"
|
(3) | ||||||||
LR"-d- ()(-r- ())-d- ()"
|
(4) | ( C++11) | |||||||
u8"-s- ()"
|
(5) | ( C++11) | |||||||
u8R"-d- ()(-r- ())-d- ()"
|
(6) | ( C++11) | |||||||
u"-s- ()"
|
(7) | ( C++11) | |||||||
uR"-d- ()(-r- ())-d- ()"
|
(8) | ( C++11) | |||||||
U"-s- ()"
|
(9) | ( C++11) | |||||||
UR"-d- ()(-r- ())-d- ()"
|
(10) | ( C++11) | |||||||
| -s- | s- | |
| s- | ||
| -s- | , ", \
| |
| -d- | d- 16 | |
| d- | , , | |
| -r- | r- , , )-d-"
| |
| r- |
| (1,2) | const char[N]
|
||||||
| (3,4) | const wchar_t[N]
|
||||||
| (5,6) | UTF-8 |
|
UTF-8 | ||||
| (7,8) | UTF-16 | const char16_t[N]
|
UTF-16 | ||||
| (9,10) | UTF-32 | const char32_t[N]
|
UTF-32 |
UTF-8 ( C++11) .
.
bool b = "bar" == 3 + "foobar"; // true false,
const char* pc = "";
char* p = const_cast<char*>(pc);
p[0] = 'M'; //
|
, // OK: ,
// "\\"
R"(\)";
// OK: \n,
// "\\n\\n\\n\\n"
R"(\n\n\n\n)";
// OK: ,
// ,
// ")\"\"("
R"-()""()-";
// OK: "\n)\\\na\"\"\n"
R"a(
)\
a""
)a";
// OK: "x = \"\"\\y\"\""
R"(x = ""\y"")";
// R"<<(-_-)>>"; // :
// R"-()-"-()-"; // : )-"
|
( C++11) |
, s- r- ( C++11) (U+0000) :
, , , , .
, .
, , , .
, , 6 ( ). "," " !" () ", !". ( ), ( ).
|
, , , , , , . L"x = %" PRId16 // 4, PRId16 "d"
// 6, L"x = %" "d" L"x = %d"
UTF-8 , . |
( C++11) |
|
, . ( .) |
( C++11) ( C++23) |
|
. |
( C++23) |
, :
static_assert( C++11)- ( C++11)
[[deprecated]]( C++14)[[nodiscard]]( C++20)
|
, ( , ) ( C++11). |
( C++26) |
|
. |
( C++26) |
. char str[] = "foo";, str "foo".
|
|
( C++11) |
|
|
( C++11) |
, : , , .
const char* p = "abc\0def"; // std::strlen(p) == 3, 8
, . :
//const char* p = "\xfff"; // :
//
const char* p = "\xff""f"; // OK: const char[3], {'\xff','f','\0'}
__cpp_char8_t |
202207L |
(C++20) | char8_t ( (unsigned) char UTF-8)
|
__cpp_raw_strings |
200710L |
(C++11) | |
__cpp_unicode_literals |
200710L |
(C++11) |
#include <iostream>
char array1[] = "Foo" "bar";
// ,
char array2[] = { 'F', 'o', 'o', 'b', 'a', 'r', '\0' };
const char* s1 = R"foo(
)foo";
// ,
const char* s2 = "\n\n \n";
// ,
const char* s3 = "\n"
"\n"
" \n";
const wchar_t* s4 = L"ABC" L"DEF"; // ok, ,
const wchar_t* s5 = L"ABCDEF";
const char32_t* s6 = U"GHI" "JKL"; // ok, ,
const char32_t* s7 = U"GHIJKL";
const char16_t* s9 = "MN" u"OP" "QR"; // ok, ,
const char16_t* sA = u"MNOPQR";
// const auto* sB = u"" U"";
// C++23
// ; C++23
const wchar_t* sC = LR"--(STUV)--"; // ok,
int main()
{
std::cout << array1 << ' ' << array2 << '\n'
<< s1 << s2 << s3 << std::endl;
std::wcout << s4 << ' ' << s5 << ' ' << sC
<< std::endl;
}
:
Foobar Foobar
ABCDEF ABCDEF STUV
C++:
| CWG 411 | C++98 | |
|
| CWG 1656 | C++98 | , , |
|
| CWG 1759 | C++11 | UTF-8 , char
|
char UTF-8 |
| CWG 1823 | C++98 | , | , |
| CWG 2333 | C++11 | , UTF-8/16/32 |
|
| WG | C++98 | |
|
| WG | C++98 | 1. , 2. , , , , |
1. [1] 2. , , |
- C++23 (ISO/IEC 14882:2023):
- 5.13.5 [lex.string]
- C++20 (ISO/IEC 14882:2020):
- 5.13.5 [lex.string]
- C++17 (ISO/IEC 14882:2017):
- 5.13.5 [lex.string]
- C++14 (ISO/IEC 14882:2014):
- 2.14.5 [lex.string]
- C++11 (ISO/IEC 14882:2011):
- 2.14.5 [lex.string]
- C++03 (ISO/IEC 14882:2003):
- 2.13.4 [lex.string]
- C++98 (ISO/IEC 14882:1998):
- 2.13.4 [lex.string]
| (C++11) | |