ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ μ‘μš©

객체 μƒμ„±μ‹œ μ†Œκ΄„ν˜Έμ™€ μ€‘κ΄„ν˜Έ 차이

μ„œμ•„λž‘πŸ˜ 2023. 1. 14. 22:54

 

C++ 11은 균일 μ΄ˆκΈ°ν™”(uniform initialization)λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. 균일 μ΄ˆκΈ°ν™” ꡬ문은 μ€‘κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜λ©°, μ΄μ „μ—λŠ” ν‘œν˜„ν•  수 μ—†μ—ˆλ˜ λ°©μ‹μ˜ 객체 생성을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

class Foo {
...

private:
	int x{0};	// OK
    int y = 0;  // OK
    int z(0);	// Error!
};

 

반면 볡사할 수 μ—†λŠ” 객체(예λ₯Ό λ“€λ©΄ std::atomic)은 μ€‘κ΄„ν˜Έλ‚˜ μ†Œκ΄„ν˜Έλ‘œλŠ” μ΄ˆκΈ°ν™”ν•  수 μžˆμ§€λ§Œ =λ‘œλŠ” μ΄ˆκΈ°ν™” ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

std::atomic<int> val1{0};	//OK
std::atomic<int> val2(0);	//OK
std::atomic<int> val3 = 0;	//Error!

 

 

또, μ€‘κ΄„ν˜Έ μ΄ˆκΈ°ν™”μ˜ ν˜μ‹ μ μΈ κΈ°λŠ₯은 λ°”λ₯΄μ§€ μ•Šμ€ 암묡적 ν˜•λ³€ν™˜μ„ λ°©μ§€ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

double d1, d2, d3;
...

int sum1{d1+d2+d3};	// Error!
int sum2(d1+d2+d3);	// OK
int sum3 = d1+d2+d3;	// OK

 

λ˜ν•œ μ†Œκ΄„ν˜Έ μ΄ˆκΈ°ν™”μ˜ 방식은 μƒμ„±μž 호좜과 ν•¨μˆ˜ ν˜ΈμΆœμ„ ν—·κ°ˆλ¦¬κ²Œ λ§Œλ“€μ§€λ§Œ μ€‘κ΄„ν˜Έ μ΄ˆκΈ°ν™” 방식은 이 λΆ€λΆ„μ—μ„œ μžμœ λ‘­μŠ΅λ‹ˆλ‹€.

 

Foo f1(10)	// 인수 10d으둜 Foo의 μƒμ„±μž 호좜
Foo f2()	// Fooλ₯Ό λ°˜ν™˜ν•˜λŠ” f2의 ν•¨μˆ˜ μ„ μ–Έ..!
Foo f3{}	// 인수 μ—†λŠ” Foo의 μƒμ„±μž 호좜(Foo f3)κ³Ό κ°™λ‹€

 

 

 

 

좜처: Effective Modern C++