유형이 있고 기본 생성자를 비공개로 설정하려고한다고 가정 해 보겠습니다. 나는 다음을 쓴다 :개인 생성자가 개인 생성자가 아닌 경우는 언제입니까?
class C {
C() = default;
};
int main() {
C c; // error: C::C() is private within this context (g++)
// error: calling a private constructor of class 'C' (clang++)
// error C2248: 'C::C' cannot access private member declared in class 'C' (MSVC)
auto c2 = C(); // error: as above
}
위대한. 이것은 매우 놀라운 예상치 못한, 명시 적으로 바람직하지 않은 행위 나 파업
class C {
C() = default;
};
int main() {
C c{}; // OK on all compilers
auto c2 = C{}; // OK on all compilers
}
: 내가 생각했던대로
하지만, 생성자가 밝혀 민간 없습니다. 이게 왜 괜찮은거야?
이 아닌가'C의 C {}; '초기화를 집계하여 생성자가 호출되지 않았습니까? – NathanOliver
@ NathanOliver가 말한 바. 사용자 제공 생성자가 없으므로 'C'는 집계입니다. –
@KerrekSB 동시에 사용자에게 명시 적으로 ctor를 선언해도 사용자가 제공 한 ctor가 아니라는 것은 나에게 상당히 놀라운 일이었습니다. – Angew