Рассмотрим следующее объявление массива:Что действительно означает `int const a [5]`?
int const a[5];
С семантической точки зрения языка, это точно эквивалентно const int a[5]
? Предполагая, что это так, обе декларации будут по существу считаться «a - это массив из 5 постоянных ints».
Альтернативный способ чтения первого объявления будет «a является постоянным массивом из 5 целых чисел».
Очевидно, что оба утверждения логически означают, что весь массив является постоянным; если массив состоит из 5 постоянных ints, тогда весь массив является постоянным. Альтернативно, если весь массив является постоянным, то все его значения также являются постоянными.
Я знаю, что понятие «постоянный массив» немного бессмысленно, так как массивы не изменяются lvalues (то есть они не могут появляться с левой стороны задания). Однако существуют ли какие-либо обстоятельства, при которых эти два заявления могут привести к другому поведению?
(Cdecl.org отклоняет первое заявление в качестве синтаксической ошибки, в то время как большинство современных компиляторов принимают его.)
EDIT:
Связанный дубликат спрашивает, может ли порядок const
вопросов для обычных переменных. С массивами это немного более запутанно, поэтому я не считаю это дубликат.
'const 'относится к типу слева, если только он не является первым в объявлении , и в этом случае оно применяется к праву. Таким образом, оба эквивалентны. – bolov
Возможно, дубликат http://stackoverflow.com/questions/7633776/constant-array-of-constant-objects? Несмотря ни на что, это ничего не значит. Здесь '5' уже является константой. При использовании 'const int a [5];' он даст вам постоянный массив в 'C++'. Обратите внимание, что это не работает (правильно) в 'C'! Так что для C это в значительной степени игнорируется. – Wolph
Они такие же. http://stackoverflow.com/questions/162480/const-int-vs-int-const-as-function-parameter-in-c-and-c – rlbond