๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์‘์šฉ

๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์†Œ๊ด„ํ˜ธ์™€ ์ค‘๊ด„ํ˜ธ ์ฐจ์ด

by ์„œ์•„๋ž‘๐Ÿ˜ 2023. 1. 14.

 

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++

๋Œ“๊ธ€