2016-02-24 4 views
5

Я изучал массивы в эти дни. Я наткнулся на декларации массива и инициализации его элементов таким образом:C++: int x [+30] является допустимым объявлением?

int x[+30]; 
x[+1]=0; 

Это сбивает с толку меня немного. У меня есть понятие в виду, что когда мы пишем:

x[n]=0; 

Тогда это означает:

*(x+n)=0; 

Тогда писать x[+1] будет означать *(x++1) и это кажется недопустимым. Пожалуйста, исправьте меня за ошибку, которую я делаю в понимании этой концепции.

+1

примечание, '* (x ++ 1)' invalid, потому что '++' - оператор приращения, выражение проанализировано как '* ((x ++) 1)' –

+0

@ utkarsh867: что конкретно используется для указания емкости массива быть + ve? –

+2

Обратите внимание, что '* (x + + 1)' ** является действительным. Важное правило здесь состоит в том, что преобразование работает на уровне ** токена **, а не на уровне ** character **. – MSalters

ответ

10

x[n] средства *((x)+(n)) (обратите внимание на черный цвет) и x[+1] средства *((x)+(+1)). Это действительно.

N3337 5.2.1 индексацию

Выражение E1 [E2] идентична (по определению), чтобы * ((E1) + (Е2))

+5

Nice blackets! –

+2

Очень мелкие черные. Я почти получил те же самые. – erip

+1

Паллеты и лепестки тоже хороши. –

7

+ Плюс символ может действовать как Унарный оператор. Обычно это не имеет никакого эффекта, но следствием этого является то, что он удаляется до того, как число будет разрешено. Например:

int x[+30]; 

Преобразуется

int x[operator+(30)]; 

который затем становится

int x[30]; 

Таким образом, это выражение

x[+1] = 0; 

бы просто решить, как

x[1] = 0; 

Он не будет разрешен как * (x ++ 1), тем более, что это недопустимый синтаксис в C++.

+1

Я не думаю, что унарный плюс преобразуется в 'operator +' для аргумента 'int', это встроенный оператор. – TartanLlama

+0

@TartanLlama Для всех целей и целей он рассматривается как таковой. Вы можете писать выражения типа 'int n = 8 + +9;', и компилятор примет его и проанализирует его как '8 + 9'. – Xirema

+1

Но это не имеет никакого отношения к 'operator +', который рассматривается только в том случае, если аргумент является классом или типом перечисления.Оператор '+' - это не то же самое, что 'operator +'. – TartanLlama

Смежные вопросы