c++默认参数顺序为什么是自右往左?为什么不能从左往右呢?请问这是什么原因。
学习是最好的投资!
右から左に任意の数のパラメータをサポートできます
パラメータはスタックにプッシュする必要があります。スタックは左から右にプッシュされると、最初の左端のパラメータを見つけるのが非常に面倒になります~
スタック順序はビッグエンディアンとリトルエンディアンと同じで、どちらでも使用できます。 C 言語のデフォルトの選択は右から左です。これは、スタックが下に向かって成長するためです。そのため、プッシュされたパラメータのメモリ配置は、デバッグして確認するのに便利かもしれません。メモリ。ただし、実際のコードアクセスはスタックポインタ+オフセットの形式となるため、マシンにとっては特別な意味はありません。 変数パラメーターをサポートできるかどうかは、主に呼び出し元がスタックをクリアする責任があるかどうかによって決まります。たとえば、__stdcall もスタックを右から左にプッシュしますが、呼び出し先はスタックをクリアするため、変数パラメーターはサポートされません。 __pascal は PASCAL 言語を模倣し、スタックを左から右にプッシュしますが、VC ではサポートされなくなりました。
左から右へ仮定します
では、f(1) の 1 は a または b に渡されましたか? 。したがって、左から右へ進むことはできません。 。
右から左に任意の数のパラメータをサポートできます
パラメータはスタックにプッシュする必要があります。スタックは左から右にプッシュされると、最初の左端のパラメータを見つけるのが非常に面倒になります~
スタック順序はビッグエンディアンとリトルエンディアンと同じで、どちらでも使用できます。 C 言語のデフォルトの選択は右から左です。これは、スタックが下に向かって成長するためです。そのため、プッシュされたパラメータのメモリ配置は、デバッグして確認するのに便利かもしれません。メモリ。ただし、実際のコードアクセスはスタックポインタ+オフセットの形式となるため、マシンにとっては特別な意味はありません。
変数パラメーターをサポートできるかどうかは、主に呼び出し元がスタックをクリアする責任があるかどうかによって決まります。たとえば、__stdcall もスタックを右から左にプッシュしますが、呼び出し先はスタックをクリアするため、変数パラメーターはサポートされません。
__pascal は PASCAL 言語を模倣し、スタックを左から右にプッシュしますが、VC ではサポートされなくなりました。
左から右へ仮定します
リーリーでは、f(1) の 1 は a または b に渡されましたか? 。したがって、左から右へ進むことはできません。 。