C++ 11에서 default
키워드를 사용해야하는시기는 언제입니까? C++ 11 : 기본 생성자 : 암시 적 또는 명시 적?
struct Foo {
};
를 작성하는 나쁜 생각이고 다른 하나는
struct Foo {
Foo() = default;
};
를 작성해야?
C++ 11에서 default
키워드를 사용해야하는시기는 언제입니까? C++ 11 : 기본 생성자 : 암시 적 또는 명시 적?
struct Foo {
};
를 작성하는 나쁜 생각이고 다른 하나는
struct Foo {
Foo() = default;
};
를 작성해야?
default constructor이 이 아닌 경우를 생각해 보면이 컴파일러에서 제공됩니다. 그런 다음 = default
을 사용하여 컴파일러에 기본 생성자를 만들도록 지시 할 수 있습니다.
그렇지 않으면 (특별한 기본 생성자가 필요하지 않는 한) 어떠한 방식 으로든 (= default
의 유무에 관계없이) 기본 생성자를 지정할 이유가 없습니다.
예에서 "명시적인"= default
생성자가 필요하지 않습니다. 더 많은 스타일의 문제입니다.
here과 마찬가지로 인수를 사용하여 생성자를 만들면 기본 생성자가 생성되지 않습니다. 이 경우 default
키워드를 사용하면 클래스에 대해 default constructor이 생성됩니다.
그러나 다루는 객체에 기본 생성자가 있어야하는지 매우 신중하게 고려해야합니다. 즉, 다른 객체의 기본 초기화가 올바른 작업 인 경우입니다. POD 회원은 기본적으로 초기화되지 않으며 가비지 데이터가 포함될 수 있습니다 (data member initalisers 제외).
이것은 의견을 근거로 한 질문 인 것 같습니다. 그러나 첫 번째 옵션은 가장 보편적으로 사용되는 것으로 보입니다. 두 번째 옵션은 좀 더 장황하고 프로그래머는 기본 작업이 delete
이 아니면 않는 한 기본값을 사용하지 않는 경향이 있습니다.
명시 적으로 기본값이 아닌 생성자를 제공하면 컴파일러에서 기본값을 제공하지 않습니다. 이 경우 컴파일러에서 강제로 제공하도록 default 키워드를 사용할 수 있습니다.
다른 경우는 기본 생성자에 특정 보호 수준이 있는지 확인하려는 경우입니다. 예를 들어 기본 생성자가 private 또는 protected인지 확인하고자 할 수 있습니다.
감사합니다. 그 시나리오에서 나는 그 혜택을 이해합니다. 하지만 실제로 Foo 구조체를 위에 쌓아 두었다면 ctr을 생략하거나보다 구체적인 것으로 명확하게 간주되어 기본값으로 선언됩니다. – user695652