-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
もちろん、2つの結果が異なります。本質的に、 'add_one_return'は' int add_one_return(int a){return a;と同じです。 } ''のポストインクリメントは無視されるためです。 – dasblinkenlight
ここには2つの質問があります。 "彼らはなぜ異なった結果をもたらすのですか"は、彼らが異なる演算子であるため、複製によって簡単に答えることができます。もう一つの質問は、「ポストインクリメントフォームはいつ必要ですか」という興味深い質問です。重複は実際にそれに対処しません。 – nobar
'C++ preincrementとpostincrement'を見れば、違いと使いたいものをどこから見つけることができます。 – ProXicT