cpp_auto - 8BitsCoding/RobotMentor GitHub Wiki

cpp_cpp11_auto

auto๋ž€?

  • ์ž๋ฃŒํ˜•์„ ์ถ”๋ก 
  • ๋‹ค๋ฅธ ์–ธ์–ด์˜ auto์ž๋ฃŒํ˜•์€ ์‹คํ–‰ ์ค‘ ์ž๋ฃŒํ˜•์ด ๊ฒฐ์ •
  • ์‹ค์ œ ์ž๋ฃŒํ˜•์€ ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ ๊ฒฐ์ •
  • ๋ฐ˜๋“œ์‹œ auto ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•œ๋‹ค.
auto x;             // Error
auto x = "Chris";   // Ok

auto๋กœ ํฌ์ธํ„ฐ์™€ ์ฐธ์กฐ ๋ฐ›๊ธฐ

  • auto๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ์ธํ„ฐ์™€ ์ฐธ์กฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ auto ๋˜๋Š” auto* (ํฌ์ธํ„ฐ๋Š” ์•Œ์•„์„œ ์ถ”๋ก ์„ ํ•ด์ค€๋‹ค.)
    • ์ฐธ์กฐ๋ฅผ ๋ฐ›์„ ๋•Œ auto& (์ฐธ์กฐํ˜•์€ ๋ฐ˜๋“œ์‹œ ์ฐธ์กฐํ˜•์œผ๋กœ ๋ฐ›์•„์•ผํ•œ๋‹ค.)
// Example

Cat* myCat = new Cat("coco", 2);
auto myCatPtr = myCat;      // ๊ฐ€๋Šฅ? -> Ok! ๊ฐ€๋Šฅํ•˜๋‹ค

์–ด๋–ป๊ฒŒ ํฌ์ธํ„ฐ์™€ ๊ฐ’ ๋‘˜ ๋‹ค auto๋กœ ๋ฐ›์„๊นŒ?

  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋А ํ˜•์ธ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ๋ชปํ•จ auto name = object.GetName(); // ํฌ์ธํ„ฐ์ธ๊ฐ€?
  • ํฌ์ธํ„ฐํ˜•์„ ๋ฐ›์„ ๋•Œ๋Š” auto* ๋ฅผ ์จ์ฃผ๋„๋ก ํ•˜์ž
Cat myCat("CoCo", 2);
Cat& myCatRef = myCat;
auto anotherMyCatRef = myCatRef;        // ๊ฐ€๋Šฅ? -> ๋ถˆ๊ฐ€๋Šฅ... ์ฐธ์กฐ๋Š” ์ฐธ์กฐ๋กœ ๋ฐ›์ž

์•„๋‹ˆ ๋ถˆํŽธํ•˜๊ฒŒ ์™œ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์—ˆ์–ด? ๊ทธ๋ƒฅ ๋‹ค ๋ฐ›๊ฒŒ ํ•ด์ฃผ์ง€??

  • auto๋กœ ์ฐธ์กฐ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฐ›๋Š”๊ฒŒ ์ฐธ์กฐ์ธ์ง€ ์•„๋‹Œ์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋– ํ—ฅ ๊ตฌ๋ถ„ํ•ด??
auto a = b; // ์ฐธ์กฐํ•˜๋ž€๋ง์ด์•ผ ๋ณต์‚ฌํ•˜๋ž€๋ง์ด์•ผ?
  • ๊ทธ๋ž˜์„œ ๋‹น์—ฐํžˆ &๋ฅผ ๋ถ™์—ฌ์•ผํ•œ๋‹ค.

auto๋กœ const๋ฐ›๊ธฐ

const int b = 1;
auto& a = b;        // const๋ฅผ ์œ ์ง€ํ•œ์ฑ„ ๋ฐ›๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ? -> ๊ฐ€๋Šฅ

์ด๊ฑด ์ข‹์€ ์ƒ๊ฐ์ผ๊นŒ?

auto& name = object.GetName();

์œ„๋Š” const๊ฒŒ ์•„๋‹ˆ๊ฒŒ??

์—ญ์‹œ ์ข‹์ง€ ๋ชปํ•˜๋‹ค.

const auto& name = object.GetName();

์œ„์™€ ๊ฐ™์ด ์ •ํ™•ํ•˜๊ฒŒ const๋ฅผ ๋ช…์‹œํ•ด์ฃผ์ž.


auto๋ฅผ ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ํ˜•์œผ๋กœ?

  • auto ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฑธ ์ €์žฅํ•˜๋Š” ๋ฐ ๋•Œ๋ก  ์œ ์šฉ
  • ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ํ˜•์ด ๋ณ€ํ•ด๋„ auto๋Š” ๊ทธ๋Œ€๋กœ
  • ํ—ˆ๋‚˜ ์ด๋Ÿฐ ์ผ์ด ์ž์ฃผ ๋ฐœ์ƒํ• ๊นŒ??
// auto๋กœ ๋ฆฌํ„ด์„ ๋ฐ›๊ธฐ์— ๋ชจ๋‘ ๊ฐ€๋Šฅ
// double Add(double a, double b) {
float Add(float a, float b) {
    return a + b;
}

int main() {
    auto result = Add(10.0, 30.0);

    retern 0;
}

auto๋Š” ๋ฌด์กฐ๊ฑด ์ข‹๋‚˜?

  • auto ํ‚ค์›Œ๋“œ๊ฐ€ ํƒ€์ดํ•‘์„ ์ข€ ์ค„์—ฌ์ฃผ๊ธดํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค...
  • auto๋ณด๋‹ค๋Š” ์‹ค์ œ ์ž๋ฃŒํ˜•์„ ์„ ํ˜ธํ•˜๋Š”๊ฒƒ์ด ์‚ฌ์‹ค์ด๊ธดํ•˜๋‹ค.
  • ๋‹จ, ์•„๋ž˜์˜ ๋ช‡๊ฐ€์ง€ ์ƒํ™ฉ์„ ์ œ์™ธํ•˜๊ณค?

auto๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ 1 : ๋ฐ˜๋ณต์ž

  • ๋ฐ˜๋ณต์ž์—๋Š” autoํ‚ค์›Œ๋“œ๊ฐ€ ๋งค์šฐ ์œ ์šฉ
// ํ๋ฏธ ์ค„์ด ์™œ์ด๋ฆฌ ๊ธธ์–ด...
for(std::vector<int>::const_itherator it = v.begin(); it != v.end(); ++it)
{
    // do
}
for(auto it = v.begin(); it != v.end(); ++it)
{
    // do
}

auto๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ 2 : auto๋กœ ํ…œํ”Œ๋ฆฟํ˜• ๋ฐ›๊ธฐ

MyArray<int>* a = new MyArray<int>(10);

// ์•„๋Š”๊ฑธ ๋˜ ์ ๊ณ  ์‹ถ์ง€๋Š” ์•Š์•„
auto* a = new MyArray<int>(10);

์ผ๋ฐ˜์  auto ์ฝ”๋”ฉ ํ‘œ์ค€

  • auto๋ณด๋‹ค ์‹ค์ œ ์ž๋ฃŒํ˜•์„ ๊ถŒ์žฅ
  • auto๋ณด๋‹ค๋Š” auto* ๋กœ ํฌ์ธํ„ฐ ๋ช…์‹œ
  • const์ผ ๊ฒฝ์šฐ const๋ฅผ ๊ผญ ์ ์–ด์ค€๋‹ค.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ