에 C++ 클래스 초기화 :관용구 다음 C++ 클래스를 고려 제로
struct Point
{
int x;
int y;
explicit Point() =default; // 1
explicit Point(int x_, int y_): x(x_), y(y_) { } // 2
};
번째 생성자 특정 x
y
값과 함께 Point
를 만드는 데 유용하다. 처음에는 Point
을 기본값으로 만들 수 있습니다. 그러나 효율성을 위해 default
ed이고 x
및 y
을 0으로 설정하지 않습니다.
explicit Point(int val) : x(val), y(val) { } // 3
이 방법은, 내가 Point
를 초기화 기본 중 하나를 선택하거나, 모든 회원이 0으로 설정되고 그것을 초기화 할 수 있습니다 :
Point p1; // Don't initialize members.
Point p2(0); // Initialize all members to zero.
세 번째 생성자의 문제점은 제로가 아니라 모든 값을 전달할 수 있다는 것입니다. 예를 들면 :
Point p(1); // Both x and y set to 1! Is this the intent? If so,
// probably should have used Point p(1, 1) instead.
또 다른 방법은 제로 또는 기본 값을 나타내는 특별한 유형이 생성자에게 그것을 전달하는 것 :
:Default
과 같이 간단하게 정의 할 수 있습니다
explicit Point(Default) : x(0), y(0) { } // 4
그런 다음
struct Default { };
, 나는 Point
을 할 때 내가 제어 할 수는 기본값으로 초기화합니다 :
Point p1; // Don't initialize members.
Point p2(Default()); // Initialize members with default values.
어떤 방법이 더 좋을지는 모르겠지만, 센티넬 유형 Default
(no. 4) 또는 단일 값을 가져 와서 모든 구성원을 해당 값 (3 번)으로 초기화하는 생성자? 두 가지 방법의 장점/단점은 무엇입니까? 아니면 이것을하기위한 더 좋은 메커니즘이 있습니까?
편집 :이 간단한 클래스는 일러스트레이션으로 선택되었습니다. 실제로는 이 "초기화 됨"으로 간주되는 특정 기본값을 필요로하는 더 많은 구성원이있을 수 있습니다..
값 초기화를 사용할 수도 있습니다. 'Point p {};'. – juanchopanza