내가

2013-05-24 5 views
0
#include <iostream> 


int j; 

int main(void) { 


    int i; 
    std::cout<<i<<std::endl; 
    std::cout<<j<<std::endl; 

    return 0; 
} 

내가은 0이 항상 다른 값 또는 수 있습니다 C++에서이 코드 샘플에 0을 다른 값 또는 항상이 될 수있다? 그것은 처음에 맞습니까? 그것은 내가 예상치 못한 결과인가?내가

답변

6

프로그램에 정의되지 않은 값을 가진 객체에 대해 왼쪽에서 왼쪽으로의 변환이 필요하므로 프로그램에 정의되지 않은 동작이 있습니다 (C++ 11 표준의 단락 4.1/1 참조).

간단히 말해서 i은 사용자가 초기화하지 않았기 때문에 잘 정의 된 값이 없으며 (비) 값을 읽으려는 것은 정의되지 않은 동작입니다. 문단 C++ 11 표준의 8.5/7 당

:

유형 T의 객체를 기본값으로 초기화하려면 의미

-T은 (아마도 이력서 자격) 클래스 인 경우 (9 절), T의 기본 생성자가 호출된다. (T에 접근 가능한 디폴트 생성자가 없다면 초기화가 잘못되었다.);

- T이 배열 유형 인 경우 각 요소는 기본값으로 초기화됩니다.

- 그렇지 않으면 초기화가 수행되지 않습니다.. 단락 8.5/12 당 또한

는 :

에는 초기화가 객체에 대해 지정되지 않은 경우

, 객체는 기본 초기화을; 초기화가 수행되지 않으면 자동 또는 동적 저장 기간이있는 객체는 불확도 값입니다. [...]

+1

+1 항상 표준을 인용하는 것이 좋습니다. – taocp

0

i에 대해 미리 정의 된 (기본값) 값이 없습니다. 기본적으로 일부 환경에서는 0으로 설정할 수 있습니다 (Visual Studio 디버거는 이전 버전을 사용 했었지만 아직도 사용하고 있는지는 모르겠습니다).

i의 값은 정의되지 않습니다. 실제로이 값은 할당 된 주소의 스택 메모리에 있었던 값에서 가져온 것입니다.