32+84
является «постоянным выражением», которое является термином как в стандартах C, так и в C++, по существу, для арифметического выражения, значение которого может быть вычислено, не требуя от компилятора знать значение любой переменной , Когда константа используется для инициализации глобальной переменной, как в вашем
int global2=32+84;
технически ни С, ни С ++ стандарта требует добавление быть вычислено во время компиляции, но вы бы трудно нажиму найти компилятор, который не сделал этого таким образом. (Существуют другие контексты, где компилятор действительно должен оценивать постоянные выражения во время компиляции, поэтому он должен иметь код для этого, поэтому он может также делать это все время.)
global1+global2
не является константой выражение». В C это означает, что он не может использоваться для инициализации глобальной переменной; вы получите ошибку времени компиляции. В C++ это разрешено, и не указано, происходит ли добавление во время компиляции или время выполнения. Единственная гарантия заключается в том, что global3
будет иметь правильное значение к моменту, когда начнется выполнение main
; в частности, он может не иметь правильное значение, если наблюдаемое от конструктора для глобального объекта.
(Эмпирически г ++ 6 вычисляет значение для global3
во время выполнения, в то время как лязг ++ 3.9 делает это во время компиляции, что подтверждает, что обе эти возможности имеют место на практике.)
(В C++, но не в C, global1+global2
будет считаться постоянным выражением, если оба global1
и global2
был объявлен const
.)
Это недопустимое C] (https://ideone.com/NB6oJ0). –
извините. теги исправлены. благодаря! –