: 배열 또는 구조 인 경우Stroustrup의 C++ 프로그래밍 언어에 오류가 있습니까?
배열의 구성원 또는 클래스가 기본 초기화됩니다.
그러나, this test는 기본 초기화 객체의 초기화되지 않은 회원
#include <iostream>
struct Foo
{
int i;
Foo();
};
Foo::Foo() {}
int main()
{
Foo f;
std::cout << "f.i: " << f.i << std::endl;
return 0;
}
내가 모르는 뭔가가 있어야합니다 (I도 g++4.7 -std=c++11
으로 시도)를 보여줍니다, 그러나 의미하지 않는다 설명이있다 Stroustrup의 확인에 오류가 있습니까?
편집 : 답변 후 나는 기본 개념은이 (예를 들어, §17.3.1에서) 텍스트의 다른 부분에서 초기화되지 않은을 소위 포함하도록되어 초기화 이해합니다. 이것은 나에게 매우 불투명하게 들린다. 실제로 초기화되지 않은을 사용하면 "명시 적으로 사용자 초기화되지 않음"(다른 경우)과 같은 의미는 모순입니다. 일부 항목은 기본적으로 초기화되지만 아직 초기화되지 않았습니다. 하나는 X와 UN-X는 반대 일의 독점 세트를 분류하는 자연 언어 증거 ... 또한
, 같은 섹션에서 이전 문장을 삭제하지 않는 한 (§6.3.5.1)
로컬 읽고 변수 [...]는 기본 생성자가있는 사용자 정의 유형이 아닌 한 기본적으로 초기화되지 않습니다. [...]
여기에도 모순이 다시 나타납니다. 첫 번째 문과 후자의 문을 모두 받아들이면 은 변수가 (즉, 지역 변수) 동시에 이 기본값 인과 이 기본값으로 초기화되지 않았 음을 의미합니다..
IMHO 이것은 무엇보다도 자연 언어를 사용하여 설명하는 것이 가장 바람직하지 않습니다.
나는 "기본 초기화"가 "정의되지 않은 값으로 초기화"될 수 있다고 생각합니다.그것은 초기화되고 쓰기가 안전하지만 읽을 수는 없습니다. 그러나 예, 말씨는 혼란스럽고 스스로 모순됩니다. –