9.19 Default member initialization

주홍영·2022년 3월 14일
0

Learncpp.com

목록 보기
110/199

https://www.learncpp.com/cpp-tutorial/default-member-initialization/

stuct type 선언에서 member variable을 default init할 수 있따

struct Something
{
    int x;       // no initialization value (bad)
    int y {};    // value-initialized by default
    int z { 2 }; // explicit default value
};

int main()
{
    Something s1; // s1.x is uninitialized, s1.y is 0, and s1.z is 2

    return 0;
}

x는 init이 없다, 좋지 않은 습관이다
y의 경우 0으로 (int default) init 했다
z의 겨우 2로 explicit default init 했다

그리고 instantiate할 때 list에 집어 넣는 value들은
member order가 빠른 순서로 들어간다는 것을 명심하자

Default initialization vs value initialization for aggregates

struct Fraction
{
	int numerator { }; // we should use { 0 } here, but for the sake of example we'll use value initialization instead
	int denominator { 1 };
};

int main()
{
	Fraction f1;          // f1.numerator value initialized to 0, f1.denominator defaulted to 1
	Fraction f2 {};       // f2.numerator value initialized to 0, f2.denominator defaulted to 1
	Fraction f3 { 6 };    // f3.numerator initialized to 6, f3.denominator defaulted to 1
	Fraction f4 { 5, 8 }; // f4.numerator initialized to 5, f4.denominator initialized to 8

	return 0;
}

위에서 f1과 f2 중 어느 init이 더 prefer 될까?
아무래도 f2가 더 안전하다고 볼 수 있다
f2의 경우 default init이 설정되어 있지 않은 경우 0으로 init 해준다
반면 f1은 의도치 않은 동작이 발생할 수 있다

profile
청룡동거주민

0개의 댓글