[解決済み] C++でi++と++iの間に性能差はありますか?
2022-03-26 14:41:31
質問
質問があります。
との間にパフォーマンスの差はありますか?
i++
と
++i
でC
?
C++の答えは?
どのように解決するのですか?
[エグゼクティブサマリー:使用
++i
を使う特別な理由がなければ
i++
.]
C++の場合、答えはもう少し複雑です。
もし
i
は単純な型です(C++のクラスのインスタンスではありません)。
の場合、C言語の回答("No there is no performance difference")となります。
というのは、コンパイラがコードを生成しているからです。
しかし、もし
i
が C++ クラスのインスタンスである場合は
i++
と
++i
のいずれかを呼び出しています。
operator++
関数を使用します。以下は、これらの関数の標準的なペアです。
Foo& Foo::operator++() // called for ++i
{
this->data += 1;
return *this;
}
Foo Foo::operator++(int ignored_dummy_value) // called for i++
{
Foo tmp(*this); // variable "tmp" cannot be optimized away by the compiler
++(*this);
return tmp;
}
コンパイラはコードを生成しているわけではなく、単に
operator++
関数を削除する最適化の方法はありません。
tmp
変数とそれに関連するコピーコンストラクタです。コピー コンストラクタが高価な場合、パフォーマンスに大きな影響を与える可能性があります。
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む