Является ли этот код допустимым C ++? - PullRequest
8 голосов
/ 13 октября 2010

Допустим ли следующий код C ++?

const int  var = 10;
{ 
   int  var[var]; // why doesn't this give any error ?
}

Примечание: код компилируется на моем компиляторе g ++.

Ответы [ 3 ]

19 голосов
/ 13 октября 2010

Как-это?Нет. Если бы это было в теле функции?Да.

В первой строке объявлена ​​целочисленная константа с именем var со значением 10.

В скобках начинается новый блок.Внутри этого блока объявляется новая переменная с именем var, которая представляет собой массив int с размером, равным значению целочисленной константы, ранее объявленной как var (10).

Ключ в том, что var ссылается на первую переменную до тех пор, пока после вторая переменная с именем var не будет полностью объявлена.Между точкой с запятой после второго объявления и закрывающей скобкой var относится ко второй переменной.(Если бы для второй переменной был инициализатор, var начал бы ссылаться на вторую переменную непосредственно перед инициализатором.)

5 голосов
/ 13 октября 2010

Да, код действителен C ++. Нелокальный var виден до момента объявления локального var.

Итак, int var[var] определяет локальный массив из 10 целых чисел.

1 голос
/ 13 октября 2010

Да, код действителен C ++ Это понятие СФЕРЫ: сокрытие имен

 const int  var = 10;
  { 
   int  var[var]; // why doesn't this give any error ?
  }

Я думаю, что эта ссылка уберет ваши сомнения1008 *http://msdn.microsoft.com/en-US/library/9a9h7328%28v=VS.80%29.aspx

В С:

http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fzexscope_c.htm

Если вам нужны глубокие знания Об этом: перейдите по этой ссылке, здесь приведена информация о лексическом и динамическом определении объема

http://en.wikipedia.org/wiki/Scope_%28programming%29

но в вашем коде: "Scope :: " видимости var . Здесь она отличается как локальная и нелокальная переменная,Внутренние скобки {x = 1;} локальная переменная.где, как здесь {y = 1; {x = 1;} }, здесь это отличается.

полезные ссылки

http://msdn.microsoft.com/en-us/library/b7kfh662%28VS.80%29.aspx

http://www.awitness.org/delphi_pascal_tutorial/c++_delphi/c++_scope_variables.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...