2017-12-26 18 views
-6

私は何か奇妙なものを発見したときにいくつかのコードを試していました。私は、次のコードを持っていた:戻り値++ aはreturn a ++とは異なりますが、なぜですか?

#include <iostream> 

int add_one_return(int a) { 
    return a++; 
} 
void add_one_ref(int &a) { 
    a++; 
} 

int main(int argc, char const *argv[]) { 
    int a1 = 5; 
    int a2 = 5; 
    a1 = add_one_return(a1); 
    add_one_ref(a2); 
    std::cout << a1 << " " << a2 << std::endl; 
    return 0; 
} 

をしかし、私はそれを実行したときにプログラムが5 6を印刷しました。私は戻って、にadd_one_returnを変更:

int add_one_return(int a) { 
    return ++a; 
} 

、それが働きました! ++aが正常に機能するのはなぜですか(a++)? a++への利点はありますか?また、私はforループでfor(int i = 0; i < someVar; ++i) {}を使用したいと思っているので、なぜa++でしょうか?前だったし、それをインクリメントするので、もともとあなたの関数がちょうど引数を返した後、1を加えるだろうかa

+0

もちろん、2つの結果が異なります。本質的に、 'add_one_return'は' int add_one_return(int a){return a;と同じです。 } ''のポストインクリメントは無視されるためです。 – dasblinkenlight

+0

ここには2つの質問があります。 "彼らはなぜ異なった結果をもたらすのですか"は、彼らが異なる演算子であるため、複製によって簡単に答えることができます。もう一つの質問は、「ポ​​ストインクリメントフォームはいつ必要ですか」という興味深い質問です。重複は実際にそれに対処しません。 – nobar

+0

'C++ preincrementとpostincrement'を見れば、違いと使いたいものをどこから見つけることができます。 – ProXicT

答えて

4
  • a++戻ります。

  • ++a変数をインクリメントして返します。これはここで必要なものです。

関連する問題