5

操作、式、ステートメント、および副作用の順序を理解するために C++ 標準を勉強しています。

関連する問題は、名前の「宣言のポイント」です。C++11 標準のセクション 3.3.2.1 で、標準は次のように述べています。

名前の宣言のポイントは、完全な宣言子 (第 8 節) の直後で、初期化子 (存在する場合) の前です...

次の段落は、例を含むメモを追加します。

注: 外側のスコープからの名前は、それを隠す名前の宣言の時点まで表示されたままです。

...例で

const int i = 2;
{ int i[i]; }

コメントには、このコード サンプルは「2 つの整数のブロック スコープ配列を宣言する」と記載されています。

サンプルコードを見て、「宣言のポイント」の定義と、外部スコープからの名前の可視性に関する注意事項を適用することで、そのコードを見て論理的に理解できるようにしたいと思います。結論として、私自身、見た目どおりのことを行うのは整形式のコードであるということです。

しかし、これらの定義と規則に基づいて、このコードをどのように見て、この結論に到達するのか理解できません。

左から右に読むと、i[]配列の宣言はi、外側のスコープからの使用の前に表示されるように見えるため、「宣言のポイントまで表示されたままになる」という意味は、左から右に読むことを意味することはできません検出。

宣言の時点まで」は、「操作の順序」の意味に沿った何かを意味する必要があります。

配列宣言で、配列名の「宣言のポイント」が角括弧内の式の「後」にあることを規定している C++ 標準の定義または規則は何ですか? この場合の「後」とは正確には何を意味するのでしょうか。

4

2 に答える 2

11

「完全な宣言子」 --> 宣言子には[]とその内容が含まれます。つまり、上記の完全な宣言子はi[i]であるため、その後でのみ宣言されます。

于 2012-12-06T19:05:36.563 に答える
1

宣言のポイントは、完全な宣言子の直後です。したがって、外部はまだ宣言子自体の内部に隠されていません。i

于 2012-12-06T19:07:00.933 に答える