๐Ÿ”ฅ ์ฝ”๋”ฉ ๊ทœ์น™! ์ฐธ์กฐ ๋ฐ˜ํ™˜ ๊ทธ๋ฆฌ๊ณ  ๋ฐ›๋Š” ํƒ€์ž…_240427 ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€.

๋ณด๋ฌผ์ฐฝ๊ณ ยท2022๋…„ 8์›” 13์ผ
0

c++ basic ์ฝ”๋“œ๋ˆ„๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
20/50
post-custom-banner

์ฝ”๋”ฉ๊ทœ์น™ - 240729 _ 240821

  • ์ง€์—ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์•ˆ๋œ๋‹ค!
    ์™œ๋ƒํ•˜๋ฉด ์ง€์—ญ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋œ ํ›„์— ๋ณต์‚ฌ ๋Œ€์ž…์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉค๋ฒ„ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ๋‚ ๋ผ๊ฐ„ ์ƒํƒœ์ด๋‹ค.
    : ์•„๋ž˜ ์˜ˆ์ œ๋“ค์ด ์žˆ๋‹ค.

  • ์ง€์—ญ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด, ๊ฐ’ํƒ€์ž…์œผ๋กœ ํ•˜์ž.
    ์ง€์—ญ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ rvo ๋‚˜ nrvo๊ฐ€ ์ ์šฉ๋˜๊ฒŒ ํ•˜์ž.
    -> ์ตœ์ ํ™”๋ฅผ ํ•œ๋‹ค. ๋Œ€์ž…ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ฐ”๋กœ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  value ๋ฐ˜ํ™˜์ด๋ผ๊ณ  ํ•ด์„œ ํ˜น์‹œ๋‚˜ ํ•˜๋Š” ๋งˆ์Œ(๋ณต์‚ฌ๋˜์ง€ ์•Š์„๊นŒ?)์— ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ move์ฒ˜๋ฆฌ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋ง์ž. ์ด๋•Œ๋Š” rvo , nrvo ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
    : ์ดํŽ™ํ‹ฐ๋ธŒ ๋ชจ๋˜ c++ ํ•ญ๋ณต 25

์ถ”๊ฐ€ 240613 ๋ฐ˜ํ™˜ํƒ€์ž… ๋ฟ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š” ํƒ€์ž…๋„ ์ค‘์š”ํ•˜๋‹ค.

  • ๋ฐ˜ํ™˜ ๋ฐ›๋Š” ํƒ€์ž…์ด ์ฐธ์กฐ์ผ ๊ฒฝ์šฐ, ๋ณต์‚ฌ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ.
    -> ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉค๋ฒ„ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    : ์ง€์—ญ๋ณ€์ˆ˜์ธ ๊ฒฝ์šฐ์—๋Š” ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • ๋ฐ˜ํ™˜ ํƒ€์ž…์ด value ์ผ ๊ฒฝ์šฐ, ๋ณต์‚ฌ ๋ฐœ์ƒํ•œ๋‹ค.

๊ฐ’ ๋ฐ˜ํ™˜

: c++์—์„œ ๊ฐ’ ๋ฐ˜ํ™˜์€ ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. (์—…๋ฐ์ดํŠธ : 240730)
๊ทธ๊ฒƒ์ด ์ „์—ญ๊ฐ์ฒด๋‚˜ , ์ „์—ญ ๋ณ€์ˆ˜, ์ฐธ์กฐ ๊ฐ์ฒด ๋ผ๊ณ  ํ•˜๋”๋ผ๋„.
-> ์ด ๋•Œ ์ž„์‹œ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ.

  • ๊ทธ๋Ÿฐ๋ฐ ํ•จ์ˆ˜๋‚ด์˜ ์ง€์—ญ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ํ• ๋•Œ๋Š” ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.
    -> 28๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž„์‹œ๊ฐ์ฒด
    : ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด
    - ํŠน์ง• : rvalue์— ์†ํ•˜๋ฏ€๋กœ, lvalue ๋™์ž‘์ธ ์ฆ‰ ๊ฐ’๋Œ€์ž… ๋ถˆ๊ฐ€๋Šฅํ•จ.

์ž„์‹œ ๊ฐ์ฒด๋Š” ์–ธ์ œ ์ƒ์„ฑ์‹œํ‚ค๋ƒ?

  • ๊ฐ’ํƒ€์ž…์œผ๋กœ ์ธ์ž ์ „๋‹ฌํ•  ๋•Œ
  • ๊ฐ’ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๋•Œ

์ฐธ์กฐ ๋ฐ˜ํ™˜

: ๋ณต์‚ฌ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ , ๋ฐ˜ํ™˜๋˜๋Š” ์›๋ณธ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
-> 240729 ์œ„์˜ ๋‚ด์šฉ์ด 100ํผ์„ผํŠธ๊ฐ€ ์•„๋‹ˆ๋‹ค.

  • ์ฐธ์กฐ๋ฐ˜ํ™˜ ํƒ€์ž…์ธ๋ฐ ํ•จ์ˆ˜์—์„œ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ณด๋‚ธ๋‹ค?
  • ์ฐธ์กฐ๋ฐ˜ํ™˜ ํƒ€์ž…์ธ๋ฐ ํ˜ธ์ถœ์ž ์ฝ”๋“œ์—์„œ value ํƒ€์ž…์œผ๋กœ ํ˜ธ์ถœํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค..
    -> ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค... ์–ด์งˆ.

01. ํŠน์ง•

: ์ฐธ์กฐ๋ฐ˜ํ™˜ํ˜• ํ•จ์ˆ˜๋Š” & lValue ์ด๋ฏ€๋กœ, ๋ฐ˜ํ™˜ ํ›„์— ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ์Œ.
๊ทธ๋ฆฌ๊ณ  ๋ณต์‚ฌํ•œ ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ, ์›๋ณธ์— ๊ฐ’ ๋ฐ˜์˜๋จ.

02. ์ฃผ์˜ํ• ์ .

: ํ•จ์ˆ˜์—์„œ ์„ ์–ธ๋œ, ์ง€์—ญ๊ฐ์ฒด๋‚˜, ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ ๋ฐ˜ํ™˜์„ ํ•˜๋ฉด ์•ˆ๋จ.
- ์™œ?
: ํŒŒ๊ดด๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์™ธ๋ถ€์— ์ฐธ์กฐ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€
์ด๋ฏธ ์†Œ๋ฉธ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌ ๋˜๋Š” ์ฐธ์กฐ๋กœ ๋‚จ๊ธฐ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.
๋ฐ‘์— ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.
-> ์•„๋ž˜ Problem ์ •๋ง ์ค‘์š”ํ•˜๋‹ค!
-> ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ?
: ๊ทธ๋ƒฅ rvalue๋กœ ๋ฐ˜ํ™˜ํ•˜์ž.

problem

๊ฐ€) ์ „์—ญ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ํŠน์ •ํ•จ์ˆ˜์—์„œ ํ•ด๋‹น ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ฐ’๋ฐ˜ํ™˜ํ•ด์„œ
๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋ผ.

  • ๊ฒฐ๊ณผ : ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.
    -> ์ฆ‰, ๊ฐ’ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

๋‚˜) ์ž„์‹œ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ, lvalue์ฆ‰, ๊ฐ’๋Œ€์ž…์ด ๋ถˆ๊ฐ€๋Šฅํ•จ. -> ๋ฐ˜ํ™˜ ํ›„ ๋ฉค๋ฒ„๋ฐ์ดํ„ฐ์— ๊ฐ’์„ ๋Œ€์ž…ํ•ด๋ณด์•„๋ผ.

  • ๊ฒฐ๊ณผ
    : ๊ฐ’๋ฐ˜ํ™˜์„ ํ•  ๊ฒฝ์šฐ, rValue์ธ ์ž„์‹œ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ. ์ด๋กœ ์ธํ•ด ๋Œ€์ž… ๋˜ํ•œ ๋ถˆ๊ฐ€๋Šฅํ•จ.

๋‹ค) ๊ฐ’๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์ฐธ์กฐ ๋ฐ˜ํ™˜์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ.

๋ผ) ์ฐธ์กฐ๋ฐ˜ํ™˜ ํ•จ์ˆ˜๋Š” lValue๋ผ๊ณ  ํ•ด์„œ ๊ฐ’ ๋Œ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋Œ€์ž…์„ ํ•ด๋ณด์•„๋ผ.

-> ๋‹ค์™€ ๋ผ ํ•จ๊ป˜ ์ง„ํ–‰ํ•จ.

  • ๊ฒฐ๊ณผ
    ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’ ๋™์ผํ•จ. / ์ฐธ์กฐ๋ฐ˜ํ™˜์€ lValue์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€์ž…์ด ๊ฐ€๋Šฅํ•จ.
    ๊ทธ๋ฆฌ๊ณ , ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๊ณ , ์ „์—ญ ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•จ.

๋งˆ) ์ฐธ์กฐ๋ฐ˜ํ™˜ ํ•จ์ˆ˜์—์„œ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ณด์ž. ์–ด๋–ป๊ฒŒ ๋ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€?
:

-> ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.
: func ์˜ ์ง€์—ญ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—..
๋ฏธ์ •์˜ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

์—ฌ๊ธฐ ์ •๋ง ์ค‘์š”! 240729

  • ์™œ ๊ทธ๋Ÿด๊นŒ์šฉ?
    ->
    ์™œ๋ƒํ•˜๋ฉด value ํƒ€์ž… ๊ฐ์ฒด = & ๊ฐ์ฒด ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€
    1.value ํƒ€์ž… ๊ฐ์ฒด = ํด๋ž˜์Šค๋ช…(& ๊ฐ์ฒด)๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๊ณ ,
    2.์œ„์˜ ํ˜•ํƒœ๋Š” ๋ณต์‚ฌ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ํ•จ์ˆ˜์™€ ๋™์ผํ•จ์„ ์˜๋ฏธํ•จ.
    : ํด๋ž˜์Šค๋ช…(const& ํด๋ž˜์Šค๋ช… obj)
    ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ, ํ•ด์ง€๋œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์œ„ํ—˜ํ•œ ์ƒํ™ฉ์ž„.
    -> ์•„๋ž˜์— ์˜ˆ์‹œ ์ฝ”๋“œ ์žˆ์Œ.
  • ์œ„์˜ ๋‚ด์šฉ์€ ์ง€์—ญ๋ณ€์ˆ˜์—๋งŒ ํ•ด๋‹น๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
    1) ์ง€์—ญ๋ณ€์ˆ˜ ์ธ ๊ฒฝ์šฐ

2) ์ „์—ญ ๋ณ€์ˆ˜์ธ ๊ฒฝ์šฐ.

-> 1๋ฒˆ๊ณผ 2๋ฒˆ์„ ๋ณด๋ฉด, ์ถœ๋ ฅ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
1๋ฒˆ์€ ์ง€์—ญ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ์†Œ๋ฉธ์ด ๋ฐœ์ƒํ•œ ๋’ค์— ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
2๋ฒˆ์€ ์ „์—ญ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ , main ๋๋‚˜๊ณ  ์ดํ›„์— ์†Œ๋ฉธ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๊ฒฐ๋ก  240729

: ๋ฐ˜ํ™˜ํƒ€์ž…์˜ ํ•จ์ˆ˜์—์„œ ์ง€์—ญ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ์ง€์—ญ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋“ค์ด
ํ˜ธ์ถœ์ž ์ฝ”๋“œ์— ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ์†Œ๋ฉธ์ž ํ˜ธ์ถœ๋’ค์— ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐธ์กฐ ๋ฐ˜ํ™˜์—์„œ. 240807

๋ฐ›๋Š” ํƒ€์ž…์ด value or ref ์ผ ๊ฒฝ์šฐ

  • ๋ฐ›๋Š” ํƒ€์ž…์ด value์ธ ๊ฒฝ์šฐ.
    -> ๋ฐ›๋Š” obj๊ฐ€ value ํƒ€์ž…์ด์–ด์„œ ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ , foo ์—์„œ์˜ ์ง€์—ญ๋ณ€์ˆ˜ aa๊ฐ€ ๋จผ์ € ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    : ์ญ??? ๋ถ„๋ช…ํžˆ ๋ณต์‚ฌ ์ƒ์„ฑ์ž ๊นŒ์ง€ ๋งŒ๋“ค์–ด์คฌ๋Š”๋ฐ??

  • ์†Œ๋ฉธ์ž๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋˜๋ƒ? ๋ณต์‚ฌ ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋˜๋ƒ? ๋ฌธ์ œ์ด๋‹ค.

    ์ง€์—ญ ๊ฐ์ฒด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์Šคํƒ์— ํ• ๋‹น๋˜์—ˆ๋‹ค๊ฐ€ ํ•จ์ˆ˜ ์ข…๋ฃŒ์™€ ๋™์‹œ์— ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌ ์ด์ „์— ์†Œ๋ฉธ์ž๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋œ ๊ฒƒ์ด๋‹ค.
    ๊ฒฐ๋ก ์€ ์œ„์˜ ๊ฒฝ์šฐ, ์ง€์—ญ๊ฐ์ฒด๊ฐ€ ๋จผ์ € ์†Œ๋ฉธ๋œ ์ดํ›„์— ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

  • ๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋ฉด, foo() ํ•จ์ˆ˜ ํ˜ธ์ถœํ•˜๊ณ  fooํ•จ์ˆ˜ ๋‚ด์˜ ๊ฐ์ฒด aa๊ฐ€ ์†Œ๋ฉธ๋œ ํ›„
    ๋Œ€์ž…์œผ๋กœ ํ–ฅํ•œ๋‹ค.
    : char ํ˜•์ธ a ๊ฐ€ ์“ฐ๋ ˆ๊ธฐ์ธ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋‹น์—ฐํžˆ ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

์—ฌ๊ธฐ ์ค‘์š”! 240729

  • obj ๋ฅผ ์ฐธ์กฐ๋กœ ํ•ด๋ณผ๊นŒ?
    : ์ฐธ์กฐ๋กœ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” ์‚ด์•„์žˆ์ง€๋งŒ, ๋ฉค๋ฒ„์ธ a๊ฐ€ ์†Œ๋ฉธ๋˜์–ด์„œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ ?ํŽฎ ์ฆ‰ ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ์™œ๋ƒํ•˜๋ฉด ์–ด์จ‹๋“  main์—์„œ obj๋ฅผ ํ†ตํ•ด์„œ fooํ•จ์ˆ˜์˜ ์ง€์—ญ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์™”๋‹ค. ํ•˜์ง€์ง€๋งŒ, return ์œผ๋กœ ๋น ์ ธ๋‚˜์˜ค๋Š” ์ˆœ๊ฐ„ ์ง€์—ญ๊ฐ์ฒด๋Š” ์‚ฌ๋ผ์ง„๋‹ค. ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์†Œ๋ฉธ์ž์—์„œ char
    (*) a์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
    ํฌ....

์ค‘๊ฐ„ ๊ฒฐ๋ก 

  • ์ฐธ์กฐ๋ฐ˜ํ™˜ ํƒ€์ž…ํ•จ์ˆ˜์—์„œ ์ง€์—ญ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ.

1) ์ฐธ์กฐ ๋ฐ˜ํ™˜์„ ํ†ตํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์—ฐ์žฅํ•  ์ˆ˜ ์žˆ์Œ.
but, ๋ฉ”๋ชจ๋ฆฌ๋งŒ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ์ด๊ณ , ์ •์ž‘ ๋ฉค๋ฒ„ ๊ฐ’๋“ค์€ ์ด๋ฏธ ์†Œ๋ฉธ๋œ ์ƒํƒœ์ด๋‹ค.

2) ์ฐธ์กฐ ๋ฐ˜ํ™˜์„ ํ•˜๋”๋ผ๋„ ๋ฐ›๋Š” ๊ณณ์˜ ํƒ€์ž…์— ๋”ฐ๋ผ์„œ ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.

////////////////////////////////////////////////////

  • ๋ฐ›๋Š” ํƒ€์ž…์ด value ๋ผ๋ฉด ๋ณต์‚ฌ ๋ฐœ์ƒ

    ์™œ๋ƒํ•˜๋ฉด value ํƒ€์ž… ๊ฐ์ฒด = & ๊ฐ์ฒด ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€
    1.value ํƒ€์ž… ๊ฐ์ฒด = ํด๋ž˜์Šค๋ช…(& ๊ฐ์ฒด)๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๊ณ ,
    2.์œ„์˜ ํ˜•ํƒœ๋Š” ๋ณต์‚ฌ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ํ•จ์ˆ˜์™€ ๋™์ผํ•จ์„ ์˜๋ฏธํ•จ.

  • ๊ทธ๋Ÿผ ๋ฐ›๋Š” ํƒ€์ž…์ด ref ์ผ๋•Œ๋Š” ์™œ ๋ณต์‚ฌ ์•ˆ ์ผ์–ด๋‚จ?

    ์ฐธ์กฐ๋Š” ํ˜ผ์ž ์„ ์–ธ์„ ํ•  ์ˆ˜ ์—†์Œ , ๋ฐ˜๋“œ์‹œ lvalue ์™€ ํ•จ๊ป˜ ํ•ด์•ผ ํ•จ.
    ์ฐธ์กฐ๋Š” lvalue์˜ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„.
    -> ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ํ•˜๋”๋ผ๋„ ํ•จ์ˆ˜ ๋‚ด์˜ ์ง€์—ญ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๋ฉธ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ผ์–ด๋‚œ๋‹ค๋Š” ์ ์ด๋‹ค.

๊ฒฐ๋ก  240427 / 240729

: ํ•จ์ˆ˜๋‚ด์—์„œ ์‚ฌ๋ผ์ง€๋Š” ์ง€์—ญ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ.
์ด๋ฅผ ์ฐธ์กฐ๋กœ ๋ฐ˜ํ™˜ํ•  ๊ฒฝ์šฐ, ๋ฐ›๋Š” ํƒ€์ž…์ด value ์ด๋“  , ์ฐธ์กฐ ํƒ€์ž…์ด๋“ 
์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋‚ ๋ผ๊ฐ„ ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

value ํƒ€์ž… = &ํ•จ์ˆ˜ ์ธ ๊ฒฝ์šฐ์—๋Š” ๋ณต์‚ฌ ๋ฐœ์ƒ, ๊ทธ๋ฆฌ๊ณ  ์ฐธ์กฐ ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ด๋ฏธ ์—†๋‹ค.
์ฐธ์กฐ ํƒ€์ž… = &ํ•จ์ˆ˜ ์ธ ๊ฒฝ์šฐ์—๋Š” ๋ณต์‚ฌ ๋ฐœ์ƒ ์•ˆํ•จ. ๊ทธ๋Ÿฌ๋‚˜ ์ฐธ์กฐ ํ•จ์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ ์ด๋ฏธ ์—†๋‹ค.

๊ทธ๋Ÿผ ์ง€์—ญ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด??? 240427 ์ถ”๊ฐ€.

๊ฐ€) ํ˜ธ์ถœ์ชฝ์—์„œ move ๋ฅผ ํ•˜์ž.

์›ฌ๋งŒํ•˜๋ฉด ๊ทธ๋ƒฅ ๋ณต์‚ฌ๋ฅผ ์ผ์œผํ‚ค๊ฒŒ ํ•˜์ž. ์•„๋‹ˆ๋ฉด , move ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž.

  • move ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ์ด๊ณ , ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด main์ชฝ ๊ฐ์ฒด๋Š” value ์ด๊ธฐ ๋•Œ๋ฌธ์—
    ๊ฐ์ฒด 2๊ฐœ์˜ ์ƒ์„ฑ์ž๋Š” ํ˜ธ์ถœ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ char* ์˜ ๋™์  ํ• ๋‹น์€ ํ•œ๋ฒˆ๋งŒ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ์ด๋‹ค.
  • -> ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์€ ์ด๋™์ƒ์„ฑ์ž์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ. noexcept๋ฅผ
    ๋ฐ˜๋“œ์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๋‚˜) rvalue Ref ์ธ ๊ฒฝ์šฐ.

  • ๋ฐ›๋Š” ํƒ€์ž…์„ && ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด??? ๊ทธ๋ฆฌ๊ณ  move ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž .
    : ์ง  ์ƒ์„ฑ์ž๋Š” 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๊ณ , move ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— foo ํ•จ์ˆ˜์—์„œ ๋งŒ๋“ 
    ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • -> ๊ทธ๋ฆฌ๊ณ  obj๋Š” lvalue ๋ผ๋Š” ๊ฒƒ์„ ์—ผ๋‘ ํ•˜์ž.
    : ์ฆ‰ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹ค) rvo / nrvo๋ฅผ ์ƒ๊ฐํ•˜์ž. 240729

  • ๊ฐ€) ์—์„œ ํ•œ๊ฒƒ๋ณด๋‹ค ์ด๋“์ด๋‹ค!
    : ๊ฐ์ฒด ์ƒ์„ฑ ํ•œ๋ฒˆ์„ ์Šคํ‚ตํ•œ๋‹ค.

๋ผ) rvalue ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ, ๊ตณ์ด move ์•ˆํ•ด๋„ ๋œ๋‹ค.

: ๋‚˜)์ฒ˜๋Ÿผ ํ•  ํ•„์š” ์—†๋‹ค.

์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋œ ์ฝ”๋“œ

class A
{
public :
	A(const A& _obj)
	{
		cout << "copy" << endl;
		a = new char[strlen(_obj.a) + 1];
		strcpy(a, _obj.a);
	}
	~A() { cout << "~" << endl; delete[] a; }
	A(A&& _moveObj) noexcept
	{
		cout << "move" << endl;
		a = _moveObj.a;
		_moveObj.a = 0;
	}
	A(const char* _c)
	{
		a = new char[strlen(_c) + 1];
		strcpy(a, _c);
		cout << "A::a Alloc" << endl;
	}
	char* a;
};
A foo()
{
	A aa{ "hello" };
	cout << "foo ํ•จ์ˆ˜ ๋‚ด์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” " << &aa << endl;
	return aa;
}

int main() 
{
	A obj = foo();
	cout << &obj << endl; cout << obj.a << endl;
}

์•„๋ž˜๋Š” 240614 ๋‚ด์šฉ.

rvo , nrvo ์— ์˜ํ•ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ํ•ด๋„ ๋œ๋‹ค.

์ง„ํ–‰์‚ฌํ•ญ๊ณผ ๋ฌด๊ด€) ์•„๋‹ˆ๋ฉด ์ฐจ๋ผ๋ฆฌ value ๋ฐ˜ํ™˜์ผ ๊ฒฝ์šฐ, ์ž„์‹œ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ผ ์ˆ˜ ์žˆ๋‹ค. 240614

  • ์ž„์‹œ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ๊ฐ์ฒด๊ฐ€ 2๋ฒˆ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ž.
profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€