@@ -249,10 +249,10 @@ <h3>契約属性</h3>
249
249
< li > < code > [[ensure: 述語]]</ code > :関数から戻る際に期待する事後条件を定義する。</ li >
250
250
< li > < code > [[assert: 述語]]</ code > :アサーションを定義する。</ li >
251
251
</ ul >
252
- < p > expectおよびensure属性の述語は 、関数の最初の式文と同じセマンティクスで評価される。
252
+ < p > expectおよびensure属性の < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > は 、関数の最初の式文と同じセマンティクスで評価される。
253
253
より詳細に言えば、仮引数は見えるがローカル変数は見えない。</ p >
254
- < p > 述語が例外を送出すると 、< code > < a href ="../../reference/exception/terminate.html "> std::terminate()</ a > </ code > 関数を呼び出してプログラムを終了させる。</ p >
255
- < p > 述語が副作用を持つ場合 、< a class ="cpprefjp-defined-word " data-desc ="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。 " href ="../../implementation-compliance.html#dfn-undefined-behavior "> 動作は未定義</ a > である。例えば、グローバル変数の変更、< code > volatile</ code > 変数の参照、変数を変更する可能性のある関数の呼び出しなどが該当する。</ p >
254
+ < p > < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > が例外を送出すると 、< code > < a href ="../../reference/exception/terminate.html "> std::terminate()</ a > </ code > 関数を呼び出してプログラムを終了させる。</ p >
255
+ < p > < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > が副作用を持つ場合 、< a class ="cpprefjp-defined-word " data-desc ="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。 " href ="../../implementation-compliance.html#dfn-undefined-behavior "> 動作は未定義</ a > である。例えば、グローバル変数の変更、< code > volatile</ code > 変数の参照、変数を変更する可能性のある関数の呼び出しなどが該当する。</ p >
256
256
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="c1 "> // < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0542r5.html " target ="_blank "> P0542R5</ a > より引用</ span >
257
257
< span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> ;</ span >
258
258
< span class ="k "> volatile</ span > < span class ="kt "> int</ span > < span class ="n "> y</ span > < span class ="p "> ;</ span >
@@ -338,12 +338,12 @@ <h3>expect属性</h3>
338
338
</ code > </ pre > </ div >
339
339
</ p >
340
340
< p > この属性は関数宣言の関数型に対して指定する。</ p >
341
- < p > 述語では 、関数の引数を参照できる。</ p >
341
+ < p > < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > では 、関数の引数を参照できる。</ p >
342
342
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="kt "> void</ span > < span class ="n "> f</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> )</ span >
343
343
< span class ="p "> [[</ span > < span class ="nl "> expects</ span > < span class ="p "> :</ span > < span class ="n "> x</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span > < span class ="p "> ]]</ span >
344
344
</ code > </ pre > </ div >
345
345
</ p >
346
- < p > expect属性の述語は関数の本体を評価する直前に評価される 。関数の本体には、関数tryブロックおよびコンストラクタのメンバ初期化子を含む。</ p >
346
+ < p > expect属性の < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > は関数の本体を評価する直前に評価される 。関数の本体には、関数tryブロックおよびコンストラクタのメンバ初期化子を含む。</ p >
347
347
< p > 1つの関数に複数のexpect属性がある場合、評価は記述した順になる。</ p >
348
348
< h3 > ensure属性</ h3 >
349
349
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="p "> [[</ span > < span class ="nl "> ensure</ span > < span class ="p "> :</ span > < span class ="err "> 述語</ span > < span class ="p "> ]]</ span >
@@ -359,7 +359,7 @@ <h3>ensure属性</h3>
359
359
< span class ="p "> [[</ span > < span class ="n "> ensures</ span > < span class ="nl "> r</ span > < span class ="p "> :</ span > < span class ="n "> get</ span > < span class ="o "> <</ span > < span class ="mi "> 0</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> r</ span > < span class ="p "> )</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span > < span class ="o "> &&</ span > < span class ="n "> get</ span > < span class ="o "> <</ span > < span class ="mi "> 1</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> r</ span > < span class ="p "> ).</ span > < span class ="n "> size</ span > < span class ="p "> ()</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span > < span class ="p "> ]];</ span > < span class ="c1 "> // OK</ span >
360
360
</ code > </ pre > </ div >
361
361
</ p >
362
- < p > ensure属性の述語は関数から戻る直前に評価される 。このとき、ローカル変数や一時オブジェクトの寿命はすでに尽きている。</ p >
362
+ < p > ensure属性の < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > は関数から戻る直前に評価される 。このとき、ローカル変数や一時オブジェクトの寿命はすでに尽きている。</ p >
363
363
< p > 1つの関数に複数のensure属性がある場合、評価は記述した順になる。</ p >
364
364
< h3 > assert属性</ h3 >
365
365
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="p "> [[</ span > < span class ="nl "> < a href ="../../reference/cassert/assert.html "> assert</ a > </ span > < span class ="p "> :</ span > < span class ="err "> 述語</ span > < span class ="p "> ]]</ span >
@@ -369,7 +369,7 @@ <h3>assert属性</h3>
369
369
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="p "> [[</ span > < span class ="nl "> < a href ="../../reference/cassert/assert.html "> assert</ a > </ span > < span class ="p "> :</ span > < span class ="n "> x</ span > < span class ="o "> ></ span > < span class ="mi "> 0</ span > < span class ="p "> ]];</ span >
370
370
</ code > </ pre > </ div >
371
371
</ p >
372
- < p > assert属性の述語は適用先の空文と共に評価される 。</ p >
372
+ < p > assert属性の < a class =" cpprefjp-defined-word " data-desc =" boolを返す関数・関数オブジェクト。predicate " > 述語 </ a > は適用先の空文と共に評価される 。</ p >
373
373
< h3 > 契約と継承 - Assertion Redeclaration rule</ h3 >
374
374
< p > あるクラス内で契約されている関数がそのクラスを継承した別のクラスでオーバーライドされる場合、オーバーライドした関数は少なくとも元の関数になされた契約を遵守しなければならない。より詳細には</ p >
375
375
< ul >
0 commit comments