以前に Q&A がありました: C++ での宣言のポイント。ルール宣言ポイントは、多くの状況にうまく適用できます。auto
さて、このルールの組み合わせでの使用について混乱しました。
次の 2 つのコードを検討してください。
私。x
単独で宣言する(動作するとは思わない) :
{
auto x = x;
}
ii. 内側x
を外側x
で宣言する (gcc 4.8.x ではエラーになります) :
{
int x = 101; // the outer x
{
auto x = x; // the inner x
}
}
宣言点の規則によれば、機能するはずですが、機能しません。標準には、私が見逃した別のルールがあるようです。問題は、使用時の宣言ポイントはどこauto
ですか?
次の 2 つの可能性があります。
私。宣言のポイントが の後=
、ステートメントの最後にある場合:
auto object = expression;
^
Is it here? If it is, why gcc complains?
したがって、2 番目の宣言は有効であり、機能する必要がありx
ます。これは、その外側の宣言 (前に宣言されている) しかないためです。したがってauto x=x
、 は有効であり、内部x
は に割り当てられる必要があります101
。
ii. 宣言のポイントが前にある場合=
:
auto object = expression;
^
auto
まあ、次の式を見るまで待たなければならないので意味がありません。たとえばauto x;
無効です。
更新:宣言のルールポイントで説明する回答が必要です。