Постоянные выражения в Objective-C - PullRequest
0 голосов
/ 29 июля 2011

Если у вас есть «128 + 7 - i» (где i объявлена ​​как целочисленная переменная), это константное выражение?Почему или почему нет?

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Это зависит от того, где объявлено i, и от того, сможет ли компилятор выяснить, есть ли шанс, что он может быть изменен во время выполнения.

Например, если ваш код выглядел так:

...
int i = 3;
int x = 128 + 7 - i;
...

компилятор может выяснить, что нет способа, которым i мог бы измениться, прежде чем он был использован в вашем выражении. В этом случае он может быть встроен как константное выражение во время компиляции.

Если, однако, это было бы так:

-(void) doSomething:(int) i {
    ...
    int x = 128 + 7 - i;
    ...
}

Значение может изменяться во время выполнения в зависимости от параметра метода, в этом случае оно не может быть постоянным для компилятора.

Помните, что компилятор может выполнять оптимизацию, подобную описанной выше, зависит от настроек компилятора. Например, в отладочных сборках это наверняка не будет сделано.

РЕДАКТИРОВАТЬ : Как правильно указал Руди Велтуис в комментариях, я был слишком быстр в своем ответе. На самом деле, первый пример на самом деле не является константным выражением, о котором вам (очень явно) скажет компилятор. Я не учел, что константное выражение является фиксированным термином с четким определением (например, см. Спецификацию языка Java здесь , сейчас у вас нет версии на C). Вместо этого я перепутал это с техникой оптимизации компилятора, которая посредством анализа потока данных внутри метода позволила бы ему заменить вышеупомянутый код постоянным значением.

3 голосов
/ 29 июля 2011

Я бы сказал, что это не потому, что я - переменная, поэтому, когда вы выполняете математические вычисления с переменной, результат не может быть константой.

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