|
188 | 188 |
|
189 | 189 | <p class="text-right"><small>
|
190 | 190 | 最終更新日時(UTC):
|
191 |
| - <span itemprop="datePublished" content="2024-07-08T07:33:21"> |
192 |
| - 2024年07月08日 07時33分21秒 |
| 191 | + <span itemprop="datePublished" content="2024-07-27T07:23:15"> |
| 192 | + 2024年07月27日 07時23分15秒 |
193 | 193 | </span>
|
194 | 194 | <br/>
|
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
196 |
| - <span itemprop="name">Akira Takahashi</span> |
| 196 | + <span itemprop="name">koile</span> |
197 | 197 | </span>
|
198 | 198 | が更新
|
199 | 199 | </small></p>
|
@@ -221,13 +221,13 @@ <h2>概要</h2>
|
221 | 221 | <p>C++11で追加された文字型<a href="../cpp11/char16_32.html"><code>char16_t</code>と<code>char32_t</code></a>の文字・文字列リテラルの文字コード、C++20からはUTF-16とUTF-32であることが規定される。</p>
|
222 | 222 | <p>これまでは、以下のような仕様であった:</p>
|
223 | 223 | <ul>
|
224 |
| -<li><code><uchar></code>ヘッダでマクロ<code>__STDC_UTF_16__</code>が定義される場合、<code>char16_t</code>型の値はUTF-16の妥当なコードポイントを持つ。そうでない場合、<code>char16_t</code>型の値は<a class="cpprefjp-defined-word" data-desc="処理系定義の動作。処理系によって事前に定めた動作をする" href="../../implementation-compliance.html#dfn-implementation-defined-behavior">実装定義</a>の文字コードとなる。</li> |
225 |
| -<li><code><uchar></code>ヘッダでマクロ<code>__STDC_UTF_32__</code>が定義される場合、<code>char32_t</code>型の値はUTF-32の妥当なコードポイントを持つ。そうでない場合、<code>char32_t</code>型の値は<a class="cpprefjp-defined-word" data-desc="処理系定義の動作。処理系によって事前に定めた動作をする" href="../../implementation-compliance.html#dfn-implementation-defined-behavior">実装定義</a>の文字コードとなる。</li> |
| 224 | +<li><code><cuchar></code>ヘッダでマクロ<code>__STDC_UTF_16__</code>が定義される場合、<code>char16_t</code>型の値はUTF-16の妥当なコードポイントを持つ。そうでない場合、<code>char16_t</code>型の値は<a class="cpprefjp-defined-word" data-desc="処理系定義の動作。処理系によって事前に定めた動作をする" href="../../implementation-compliance.html#dfn-implementation-defined-behavior">実装定義</a>の文字コードとなる。</li> |
| 225 | +<li><code><cuchar></code>ヘッダでマクロ<code>__STDC_UTF_32__</code>が定義される場合、<code>char32_t</code>型の値はUTF-32の妥当なコードポイントを持つ。そうでない場合、<code>char32_t</code>型の値は<a class="cpprefjp-defined-word" data-desc="処理系定義の動作。処理系によって事前に定めた動作をする" href="../../implementation-compliance.html#dfn-implementation-defined-behavior">実装定義</a>の文字コードとなる。</li> |
226 | 226 | </ul>
|
227 | 227 | <p>C++20では、無条件にUTF-16とUTF-32であることが規定される。</p>
|
228 | 228 | <p>なお、<code>u8</code>プレフィックスをつけた文字・文字列リテラルは、UTF-8であることがこれまでに規定されていた。</p>
|
229 | 229 | <h2>この機能が必要になった背景・経緯</h2>
|
230 |
| -<p>これまで、<code><uchar></code>ヘッダのマクロ<code>__STDC_UTF_16__</code>と<code>__STDC_UTF_32__</code>が定義されている場合にのみ、<code>char16_t</code>と<code>char32_t</code>はUTF-16/UTF-32エンコーディングであると規定されていた。</p> |
| 230 | +<p>これまで、<code><cuchar></code>ヘッダのマクロ<code>__STDC_UTF_16__</code>と<code>__STDC_UTF_32__</code>が定義されている場合にのみ、<code>char16_t</code>と<code>char32_t</code>はUTF-16/UTF-32エンコーディングであると規定されていた。</p> |
231 | 231 | <p>しかし、これらが定義されなかった場合にコンパイラがほかのエンコーディングを選択することが疑わしかった。また、<code>char16_t</code>の仕様として「サロゲートペア」が含まれているが、その概念をもつ他のよく知られた文字コードはない。単一の文字を32ビットで表現する他のよく知られた文字コードもない。</p>
|
232 | 232 | <p>実際にはすべての実装でこれらの文字・文字列リテラルはUTF-16とUTF-32にエンコーディングされるため、要件を示すだけではなく、より明確にするために、<code>char16_t</code>と<code>char32_t</code>の文字・文字列リテラルがUTF-16とUTF-32文字コードであることを規定する。</p>
|
233 | 233 | <h2><a href="#relative-page" id="relative-page">関連項目</a></h2>
|
|
0 commit comments