28
28
< meta property ="og:url " content ="https://cpprefjp.github.io/lang/cpp17/construction_enum_class_values.html " />
29
29
< meta property ="og:site_name " content ="cpprefjp - C++日本語リファレンス " />
30
30
< meta property ="og:type " content ="article " />
31
- < meta property ="og:description " content ="C++11にてスコープを持つ列挙型が導入された 。これは基底型を明示することができ、従来の列挙型と異なり整数型への暗黙の型変換を行わない。 " />
31
+ < meta property ="og:description " content ="C++11にて[スコープを持つ列挙型](/lang/cpp11/scoped_enum.md)が導入された 。これは基底型を明示することができ、従来の列挙型と異なり整数型への暗黙の型変換を行わない。 " />
32
32
< meta name ="twitter:card " content ="summary " />
33
33
< meta name ="twitter:title " content ="enum class変数の初期値として整数を指定する際の規則を調整 [P0138R2] - cpprefjp C++日本語リファレンス " />
34
34
< meta name ="twitter:url " content ="https://cpprefjp.github.io/lang/cpp17/construction_enum_class_values.html " />
35
- < meta name ="twitter:description " content ="C++11にてスコープを持つ列挙型が導入された 。これは基底型を明示することができ、従来の列挙型と異なり整数型への暗黙の型変換を行わない。 " />
35
+ < meta name ="twitter:description " content ="C++11にて[スコープを持つ列挙型](/lang/cpp11/scoped_enum.md)が導入された 。これは基底型を明示することができ、従来の列挙型と異なり整数型への暗黙の型変換を行わない。 " />
36
36
37
37
38
38
< link rel ="alternate " type ="application/atom+xml " title ="Atom " href ="https://cpprefjp.github.io/rss.xml " />
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-08-14T17:57:31 ">
192
+ 2024年08月14日 17時57分31秒
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 "> Tetsuro Matsumura </ span >
197
197
</ span >
198
198
が更新
199
199
</ small > </ p >
@@ -218,10 +218,10 @@ <h1 itemprop="name"><span class="token">enum class変数の初期値として整
218
218
< p > のちのC++規格でさらに変更される場合があるため< a href ="#relative-page "> 関連項目</ a > を参照してください。</ p >
219
219
< p > </ p >
220
220
< h2 > 概要</ h2 >
221
- < p > C++11にてスコープを持つ列挙型が導入された 。これは基底型を明示することができ、従来の列挙型と異なり整数型への暗黙の型変換を行わない。</ p >
221
+ < p > C++11にて < a href =" ../cpp11/scoped_enum.html " > スコープを持つ列挙型 </ a > が導入された 。これは基底型を明示することができ、従来の列挙型と異なり整数型への暗黙の型変換を行わない。</ p >
222
222
< p > 型変換を禁止する規則が厳格すぎて、初期化の際に不便が生じていたためC++17で規則が緩和された。</ p >
223
223
< h2 > 仕様</ h2 >
224
- < p > スコープを持つ列挙型に基底型が指定されていて 、初期化リストが単一の要素< code > v</ code > を持ち、かつリストによる直接の初期化であれば、初期化できる。</ p >
224
+ < p > < a href =" ../cpp11/scoped_enum.html " > スコープを持つ列挙型 </ a > に基底型が指定されていて 、初期化リストが単一の要素< code > v</ code > を持ち、かつリストによる直接の初期化であれば、初期化できる。</ p >
225
225
< p > ただし基底型へ変換する際に、精度を失う変換が要求される場合はプログラムは< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
226
226
< h2 > 例</ h2 >
227
227
< p > < div class ="yata " id ="d0f31b25dc0150652caa74c3fdbbe2a2e7f9d328 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> enum</ span > < span class ="k "> class</ span > < span class ="nc "> byte</ span > < span class ="o "> :</ span > < span class ="kt "> unsigned</ span > < span class ="kt "> char</ span > < span class ="p "> {</ span > < span class ="p "> };</ span >
@@ -286,13 +286,13 @@ <h3>警告例</h3>
286
286
2 errors generated.
287
287
</ code > </ pre > </ p >
288
288
< h2 > この機能が必要になった背景・経緯</ h2 >
289
- < p > ユーザ定義の整数を定義する際のテクニックとして例で挙げたように、要素を一つも持たないスコープを持つ列挙型を定義する方法がある 。</ p >
289
+ < p > ユーザ定義の整数を定義する際のテクニックとして例で挙げたように、要素を一つも持たない < a href =" ../cpp11/scoped_enum.html " > スコープを持つ列挙型 </ a > を定義する方法がある 。</ p >
290
290
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> enum</ span > < span class ="k "> class</ span > < span class ="nc "> byte</ span > < span class ="o "> :</ span > < span class ="kt "> unsigned</ span > < span class ="kt "> char</ span > < span class ="p "> {</ span > < span class ="p "> };</ span >
291
291
</ code > </ pre > </ div >
292
292
</ p >
293
293
< p > < code > unsigned char</ code > 型を直接使用すると整数への暗黙の型変換が行われ、しばしばバグの原因となるが、< code > byte</ code > 型を使えば整数への暗黙の型変換を防ぐことができる。それでいて< code > unsigned char</ code > 型を直接使用した場合と同様の効率良いコードを書くことができる利点がある(例えば< code > struct</ code > のコピーや値渡しにペナルティが生じるようなアーキテクチャでも、効率良く扱うことができる)。</ p >
294
294
< p > しかしこのテクニックの欠点は< code > byte</ code > 型を整数で初期化する際にキャストが必要となってしまうことである。キャストを行うとプログラムが見づらいうえに、精度が失われる変換を検出できなくなる問題があった(プログラマが本当に精度を失わせたいのか、間違った値を指定しただけなのか、コンパイラには判断できない)。</ p >
295
- < p > C++17ではスコープを持つ列挙型の初期化ルールを緩和し 、簡潔な記述を実現するとともに、意図せず精度を失う変換を行う危険性を排除した。</ p >
295
+ < p > C++17では < a href =" ../cpp11/scoped_enum.html " > スコープを持つ列挙型 </ a > の初期化ルールを緩和し 、簡潔な記述を実現するとともに、意図せず精度を失う変換を行う危険性を排除した。</ p >
296
296
< h2 > < a href ="#relative-page " id ="relative-page "> 関連項目</ a > </ h2 >
297
297
< ul >
298
298
< li > < a href ="../cpp11/scoped_enum.html "> C++11 スコープを持つ列挙型</ a > </ li >
0 commit comments