두 가지 버전의 C++ 코드가 있습니다. 하나는 문제를주고 다른 하나는하지 않습니다const 멤버 및 기본 생성자와의 오류
/*
* This compiles fine
*/
class base {
private:
const char c;
};
int main() {
base b(); // compiles fine
}
/* *이 차이는 '기본 B()'와 '베이스 (B)'는 컴파일 오류를 */
class base {
private:
const char c;
};
int main() {
base b; // error: structure 'b' with uninitialized const members
}
참고를 제공합니다. 둘 다 기본 생성자를 호출하고 클래스에 const 필드가 있기 때문에 프로그램이 컴파일되지 않습니다. 설명해주세요. 사실,
base b; // Declares an object b of type base
base b(); // Declares a FUNCTION called b that takes no argument an returns a base
: 첫 번째 버전 유형 base
의 객체를 생성하지 않기 때문이다
가능한 복제본 [const 데이터 멤버가 포함 된 클래스에 기본 생성자가없는 이유] (http://stackoverflow.com/questions/16706674/why-default-constructor-is-not-present-for- a-class-containing-const-data-members) – juanchopanza
당신은 C++의 "가장 귀찮은 구문 분석"의 또 다른 희생자입니다 (당신은 구글도 할 수 있습니다) :'base b();'는 ** 변수 정의로 해석되지 않습니다 ** 컴파일러에 의해서가 아니라'int f();'또는'void g();'과 같은 _function 선언과 같은 것이다. (어림짐작 : 컴파일러가 함수 선언으로 해석 할 수있는 모든 것은 _will_입니다.) –