32+84
은 컴파일러가 모든 변수의 값을 알지 않고도 값을 계산할 수있는 산술 표현식에 대한 C 및 C++ 표준 모두의 용어 인 "상수 표현"입니다 . 상수 표현식이
int global2=32+84;
기술적으로도는 C 나 표준 C++에서와 같이 전역 변수를 초기화하는 데 사용되는 경우 는은 또한 필요로 컴파일 시간에 평가할 수 있지만 하드 누를 것 그렇게하지 않은 컴파일러를 찾으십시오. (컴파일러가 컴파일 타임에 상수 표현식을 실제로 평가해야하는 다른 상황이 있으므로 항상 코드를 작성해야하므로 항상 수행해야합니다.)
global1+global2
은 "상수 표현". C에서는 전역 변수를 초기화하는 데 사용할 수 없다는 것을 의미합니다. 컴파일 타임 오류가 발생합니다. C++에서 허용되는 것은 컴파일 시간 또는 런타임에 추가되는지 여부입니다. 유일한 보장은 main
이 실행되기 시작하여 global3
이 올바른 값을 갖게된다는 것입니다. 특히 이 아닌은 전역 객체의 생성자에서 관찰 된 경우 올바른 값을 가질 수 있습니다.
은 C++을 (
을 (경험적으로는, g ++ 6. ++ 3.9 둘 가능성이 실제로 발생할 않는 것을 확인 컴파일시에, 그것을 수행을 연타 반면 런타임 global3
대한 값을 계산한다)하지만 하지에서 global1
및 global2
모두 const
선언 된 경우 C, global1+global2
는 상수 표현으로 간주됩니다.)
[유효하지 않은 C] (https://ideone.com/NB6oJ0). –
죄송합니다. 태그가 수정되었습니다. 감사! –