1. ホーム
  2. c++

[解決済み] 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 変数とそれに関連するコピーコンストラクタです。コピー コンストラクタが高価な場合、パフォーマンスに大きな影響を与える可能性があります。