|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana) ・ 省略 : [しょうりゃく] 1. (n,vs) omission 2. abbreviation 3. abridgment 4. abridgement ・ 略 : [りゃく] 1. (n,n-suf,vs) abbreviation 2. omission
C++プログラミングにおけるコピーの省略(コピーのしょうりゃく)とは、不必要なオブジェクトのコピーを除去するコンパイラ最適化技術のことである。C++言語標準は基本的に、出来上がったプログラムの表面上の動作が言語標準が義務付けた通りであれば、実装はどのような最適化を施しても良いとしている。(''as-ifルール'') しかし、プログラムの動作が変更され得るにも関わらず、それでもコピーが省略されうる状況を言語標準は幾つか挙げている。その中で最も有名なのが戻り値最適化であり、もう一つは、クラス型の一時オブジェクトが、同じ型のオブジェクトへとコピーされるときの最適化である。これも広く実装されており、C++言語標準で挙げられている。〔ISO/IEC (2003). ''ISO/IEC 14882:2003(E): Programming Languages - C++ ツァ12.8 Copying class objects '' para. 15〕 結果的に、''コピー初期化''と''直接初期化''の間にパフォーマンス上の違いはないが、セマンティクス上ではそうではなく、''コピー初期化''にはアクセス可能なコピーコンストラクタが未だに必要である。〔 〕 なお、参照に束縛されている一時オブジェクトは最適化されない。例: 言語標準によると、例外として投げられるオブジェクトにも、同じような最適化が適用される。〔ISO/IEC (2003). ''ISO/IEC 14882:2003(E): Programming Languages - C++ ツァ15.1 Throwing an exception '' para. 5〕〔ISO/IEC (2003). ''ISO/IEC 14882:2003(E): Programming Languages - C++ ツァ15.3 Handling an exception '' para. 17〕 しかし、投げられたオブジェクトから''例外オブジェクト''へのコピー、そして''例外オブジェクト''から''例外宣言''の''catch節''へのコピーのどちらも、最適化されるかもしれないし、されないかもしれない。これは、一時オブジェクトでも、名前付きオブジェクトでも同様である。 例: 言語標準に準拠したコンパイラは、上記のコードから"Hello World!"と二度出力するプログラムを生成しなければならなかった。現行版のC++言語標準(C++11)では、名前付きオブジェクトの例外オブジェクトへのコピーと、例外ハンドラで宣言されたオブジェクトへのコピーを省略することを本質的に許したことで、その問題は対処された。 GCCは-fno-elide-constructorsオプションを提供して、コピーの省略を無効化できるようにしている。このオプションは戻り値最適化の効果を発見(あるいは見逃し!)するのに有用である。平時にこの重要な最適化を無効化することは推奨しない。 == 脚注 == 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「コピーの省略」の詳細全文を読む スポンサード リンク
|