C/C++ Ãֽй®¹ý
C++ Ç¥ÁØÀÇ ¿ª»ç
Àß ¾Ë´Ù½ÃÇÇ C´Â 1972³â¿¡ µ¥´Ï½º ¸®Ä¡°¡ ¸¸µé¾ú°í C++Àº 80³â´ë ÃÊ¿¡ ½ºÆ®·Î½ºÆ®·ìÀÌ C¾ð¾î¿¡ °´Ã¼ ÁöÇâ °³³äÀ» Ãß°¡ÇÏ¿© ¸¸µé¾ú´Ù. ÃÊâ±â C++Àº ¿©·¯ ¾ð¾îÀÇ ±â´ÉÀ» ÅëÇÕÇÏ°í ¼¼ºÎ ¹®¹ýÀ» Æ©´×ÇÏ´Â °úÁ¤À» °ÅÃÄ 98³â¿¡¾ß °ø½Ä Ç¥ÁؾÈÀ» È®Á¤Çß´Ù. À̶§ÀÇ Ç¥ÁؾÈÀÇ °ø½Ä ¸íĪÀÌ ISO14882:1998ÀÌ¸ç °£´ÜÈ÷ ÁÙ¿© C++98À̶ó°í ºÎ¸¥´Ù.
ÃÖ±Ù±îÁöµµ C++ ÇÁ·Î±×·¡¹ÖÀº ÁÖ·Î C++98À» ±âÁØÀ¸·Î Çϸç Áö±Ý ³ª¿Í ÀÖ´Â ´ëºÎºÐÀÇ ¹®¹ý¼µµ C++98À» ±â¹ÝÀ¸·Î ÇÑ´Ù. 2000³â´ë¸¦ ÀüÈÄÇÏ¿© ÀÚ¹Ù, C# µîÀÇ ´õ ¹ßÀüµÈ ¾ð¾î°¡ µîÀåÇÏ¿© ½Ç¹«¿¡¼ Ȱ¿ë ¹üÀ§¸¦ ³ÐÇô °¡´Â µ¿¾È¿¡µµ C++Àº Å« º¯È ¾øÀÌ Á¤Ã¼µÇ¾î ÀÖ¾ú´Ù. Ãֽоð¾î¿¡ ºñÇØ ´õ °³¼±Çϱ⠾î·Á¿î ±¸Á¶ÀûÀÎ ¹®Á¦µµ ÀÖ¾ú°í ½Å»ý ¾ð¾î·Î ÀÎÇØ Á¡À¯À²µµ ¸¹ÀÌ ¶³¾îÁ³´Ù.
2003³â, 2007³â ¾Ö¸ÅÇÑ ¹®¹ýÀ» È®Á¤ÇÏ°í ¸Å´º¾ó»óÀÇ ¹ö±×¸¦ º¸¿ÏÇϸç Ç¥ÁØ ¶óÀ̺귯¸®¸¦ Á¤ºñÇßÁö¸¸ ´«¿¡ ¶ç´Â ±â´ÉÀûÀÎ Å« º¯È´Â ¾ø¾ú´Ù. ´ëºÎºÐÀÇ °³¹ßÀÚµµ ÀÌ ½Ã±â¿¡ »õ·Î µµÀÔµÈ ±â´ÉÀº °ü½ÉÀ» µÎÁö ¾Ê¾Æ ¿©ÀüÈ÷ C++98¿¡ ¸Ó¹«¸£°í ÀÖ¾ú´Ù. »ç½Ç ±× ÀÌ»óÀÇ ±â´ÉÀÌ µüÈ÷ ÇÊ¿äÇÏÁöµµ ¾Ê¾Ò¾ú´Ù.
±×·¯´øÁß C++Àº 2011³â¿¡¾ß À̸£·¯ º»°ÝÀûÀÎ ¹®¹ý Á¤ºñ¿¡ ³ª¼±â ½ÃÀÛÇß´Ù. 2000³â´ë ¸»¿¡ °³Á¤ ÀÛ¾÷¿¡ ÀÛ¼ºÇÏ¿© C++0x·Î ºÒ·ÈÀ¸³ª °á±¹ Àå°í¸¦ °ÅÃÄ 2011³â¿¡¾ß Ç¥ÁؾÈÀ» È®Á¤Çß´Ù. ÀÌ Ç¥ÁؾÈÀ» C++11À̶ó°í ºÎ¸¥´Ù. ÀÌÈÄ¿¡µµ C++14, C++17 µîÀÇ Ç¥ÁؾÈÀÌ ´õ ¹ßÇ¥µÇ¾úÀ¸³ª C++11¿¡¼ ÀÌ¹Ì Ãß°¡ÇÑ ±â´ÉÀ» ¾à°£¾¿ ´õ È®ÀåÇÏ°í ¿À·¡µÈ ±â´ÉÀ» Á¦°ÅÇÏ´Â ¼öÁØÀÇ ÀܼÕÁúÀÌÀ̾ú´Ù.
ÃÖ±Ù¿¡´Â C++20 Ç¥ÁؾÈÀÌ ¶Ç ´Ù½Ã ¿©·¯ °¡Áö °³¼± »çÇ×À» ¹ßÇ¥ÇßÁö¸¸ ¾ÆÁ÷µµ ÁøÇàÁßÀÌ´Ù. °á±¹ ÇöÀç·Î¼´Â C++11ÀÌ ¾ÈÁ¤ÈµÈ ÃֽйöÀüÀÎ ¼ÀÀÌ´Ù. ¿©±â¼´Â C++98 ¹®¹ýÀº ÀÌ¹Ì ¾È´Ù°í °¡Á¤Çϰí C++11 ÀÌÈÄ¿¡ Ãß°¡µÈ ¹®¹ýÀ» ¼³¸íÇÑ´Ù. º°µµÀÇ ÄÄÆÄÀÏ·¯¸¦ µû·Î ÁغñÇÒ ÇÊ¿ä ¾øÀÌ ºñÁÖ¾ó ½ºÆ©µð¿À 2019·Î ¸ðµç ½Ç½ÀÀ» ´Ù ÇØ º¼ ¼ö ÀÖ´Ù.
¹üÀ§ ±â¹Ý for ·çÇÁ
´Ù¸¥ ¾ð¾îÀÇ foreach¿¡ ÇØ´çÇÏ´Â ±¸¹®ÀÌ´Ù. ¹è¿À̳ª Ä÷º¼ÇÀ» ÷ÀÚ·Î ¼øÈ¸ÇÏÁö ¾Ê°í ¿ä¼Ò¸¦ ¹Ù·Î ´ëÀÔ¹Þ¾Æ Çϳª¾¿ ÀÐÀ¸¸ç ¼øÈ¸ÇÑ´Ù. Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
for (ŸÀÔ Á¦¾îº¯¼ö : Ä÷º¼Ç) { Á¦¾îº¯¼ö »ç¿ë }
Ä÷º¼ÇÀº ¼øÈ¸ °¡´ÉÇÑ ¸ðµç °ÍÀÌµÇ ´ëÇ¥ÀûÀ¸·Î ¹è¿À̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ¹è¿ Àüü¸¦ ¼øÈ¸ÇÏ¸ç ¹è¿ ¿ä¼Ò¸¦ Çϳª¾¿ Á¦¾î º¯¼ö¿¡ ´ëÀÔÇÏ¿© ·çÇÁ ³»ºÎ·Î Àü´ÞÇÑ´Ù. ¹è¿ÀÇ ÀϺθ¸ ¼øÈ¸ÇÏ´Â °æ¿ì´Â µå¹°¸ç º¸Åë Àüü ¹è¿À» ´Ù ¼øÈ¸Çϴµ¥ ÀÌ ±¸¹®À» ¾²¸é °£ÆíÇÏ´Ù.
#include <stdio.h>
int main()
{
int ar[] = { 8, 9, 6, 2, 9 };
for (int i : ar) {
printf("%d ", i);
}
}
=> 8 9 6 2 9
Á¤¼öÇü ¹è¿ arÀÇ ¸ðµç ¿ä¼Ò¸¦ Ãâ·ÂÇß´Ù. Á¦¾î º¯¼ö i´Â ÷ÀÚ 0, 1, 2, 3, 4¸¦ Àü´Þ¹Þ´Â °ÍÀÌ ¾Æ´Ï¶ó 8, 9, 6, 2, 9 ¿ä¼Ò°ªÀ» Â÷·Ê´ë·Î ´ëÀԹ޴´Ù. arÀÇ Å©±â³ª ¼øÈ¸ ¹üÀ§¸¦ ÁöÁ¤ÇÒ ÇÊ¿ä ¾øÀÌ ¾î¶² º¯¼ö·Î ¿ä¼Ò¸¦ Àаڴٴ °Í¸¸ ¹àÈ÷¸é µÈ´Ù.
Á¦¾î º¯¼öÀÇ Å¸ÀÔÀº ¹è¿ ¿ä¼Ò¿Í °°Àº °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. Á¤¼öÇü ¹è¿ arÀ» ¼øÈ¸ÇÏ´Â Á¦¾î º¯¼ö iÀÇ Å¸ÀÔÀº intÀÎ °ÍÀÌ »ó½ÄÀûÀÌ´Ù. ±×·¯³ª ²À °°¾Æ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï¸ç ȣȯ ŸÀÔµµ ¾µ ¼ö´Â ÀÖ´Ù. ´Ù¸¸ ´ëÀÔ °úÁ¤¿¡¼ ºÒÇÊ¿äÇÑ Çüº¯È¯ÀÌ ÀϾ¹Ç·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù.
for (double i : ar) {
printf("%f ", i);
}
=> 8.000000 9.000000 6.000000 2.000000 9.000000
·çÇÁ ³»ºÎ¿¡¼ Á¦¾î º¯¼ö´Â ¹è¿ ¿ä¼Ò°ªÀ» ´ëÀÔ¹Þ´Â »çº»ÀÌ´Ù. Àбâ Àü¿ëÀº ¾Æ´Ï¾î¼ º¯°æÇÒ ¼ö´Â ÀÖÁö¸¸ »çº»À» ¹Ù²Û´Ù°í ÇØ¼ ¿øº»ÀÌ ¿µÇâÀ» ¹ÞÁö´Â ¾Ê´Â´Ù.
for (int i : ar) {
i = i * 2;
}
printf("%d ", ar[0]);
=> 0
·çÇÁ¸¦ ¼øÈ¸Çϸç arÀÇ ¸ðµç ¿ä¼Ò¸¦ 2¹è·Î ¸¸µé¾ú´Ù. i´Â ½ÇÁ¦·Î 8À» ´ëÀÔ¹Þ¾Æ 16ÀÌ µÇ°í 9¸¦ ´ëÀÔ¹Þ¾Æ 18ÀÌ µÇÁö¸¸ ¿øº» ¹è¿¿¡´Â ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù. ·çÇÁ¸¦ ´Ù µ· ÈÄ ar[0]¸¦ Ãâ·ÂÇØ º¸¸é ¿©ÀüÈ÷ 8ÀÌ´Ù.
¸¸¾à ¼øÈ¸Áß¿¡ ¿øº» ¹è¿À» º¯°æÇØ¾ß ÇÑ´Ù¸é Á¦¾î º¯¼ö¸¦ ·¹ÆÛ·±½º·Î ¼±¾ðÇÑ´Ù. ·¹ÆÛ·±½º´Â »çº»ÀÌ ¾Æ´Ï¶ó ¿øº»À» °¡¸®Å°´Â ÂüÁ¶À̹ǷΠ·¹ÆÛ·±½º¸¦ ÅëÇØ ¿øº» ¹è¿À» º¯°æÇÒ ¼ö ÀÖ´Ù.
for (int& ri : ar) {
ri--;
}
for (const int& rri : ar) {
printf("%d ", rri);
}
=> 7 8 5 1 8
·çÇÁ¸¦ µ¹¸ç ¸ðµç ¹è¿ ¿ä¼ÒÀÇ °ªÀ» 1¾¿ °¨¼Ò½ÃÄ×´Ù. ¿øº» ¹è¿À» ´Ù½Ã Ãâ·ÂÇØ º¸¸é °ú¿¬ ¹è¿ ¿ä¼Ò°ªÀÌ 1¾¿ °¨¼ÒÇßÀ½À» ¾Ë ¼ö ÀÖ´Ù. ¿øº»À» Àб⸸ ÇÑ´Ù¸é Á¦¾î º¯¼ö¸¦ »ó¼ö ·¹ÆÛ·±½º·Î ¼±¾ðÇÑ´Ù.
Á¤¼öÇüÀº »ó¼ö ·¹ÆÛ·±½º¸¦ ¹Þ´Â °Íº¸´Ù´Â ±×³É »çº»°ªÀ» ¹Þ´Â °ÍÀÌ ´õ È¿À²ÀûÀÌ´Ù. ±×·¯³ª °Å´ëÇÑ ±¸Á¶Ã¼³ª °´Ã¼¶ó¸é ¸Å ·çÇÁ¸¶´Ù »çº»À» »ý¼ºÇÏ´Â °Íº¸´Ù »ó¼ö ·¹ÆÛ·±½º·Î Àд °ÍÀÌ ´õ ¾ÈÀüÇϰí È¿À²ÀûÀÌ´Ù.
¹üÀ§ ±â¹Ý for ·çÇÁµµ ¹Ýº¹¹®À̹ǷΠ·çÇÁ ³»ºÎ¿¡¼ Á¶°Ç¿¡ µû¶ó break¿Í continue¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ÄÚµå´Â 6Àº °Ç³Ê ¶Ù°í 2¸¦ ¸¸³ª¸é ·çÇÁ¸¦ Å»ÃâÇÑ´Ù.
for (int i : ar) {
if (i == 6) continue;
printf("%d ", i);
if (i == 2) break;
}
=> 8 9 2
¹üÀ§ ±â¹Ý for ·çÇÁ´Â ¹è¿ ÷ÀÚ°¡ ¾Æ´Ñ ¿ä¼Ò¸¦ ´ëÀÔ¹Þ¾Æ ¼øÈ¸Çϱ⠶§¹®¿¡ ·çÇÁ ³»ºÎ¿¡¼ °ª¸¸ ÀÐÀ» ¼ö ÀÖÀ» »Ó ¸î ¹øÂ° ¿ä¼ÒÀÎÁö´Â ¾Ë ¼ö ¾ø´Ù. ¸¸¾à ¼ø¼°ª±îÁö ¾Ë¾Æ¾ß ÇÑ´Ù¸é À̶§´Â ÀüÅëÀûÀÎ for ·çÇÁ¸¦ ¾²´Â ¼ö¹Û¿¡ ¾ø´Ù.
for (int i = 0; i < sizeof(ar) / sizeof(ar[0]); i++) {
printf("%d¹øÂ° ¿ä¼Ò = %d\r\n", i, ar[i]);
}
À̶§ Á¦¾î º¯¼ö i´Â ar ¹è¿ÀÇ Ã·ÀÚ¸¦ ¼øÈ¸ÇÏ¸ç °ªÀº ar[i]·Î Àд´Ù. for ¹®ÀÇ ±¸¹®ÀÌ Á» ±æ¾îÁö´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ ÷ÀÚ¿Í ¿ä¼Ò°ªÀ» ´Ù ÀÐÀ» ¼ö ÀÖ´Ù.
0¹øÂ° ¿ä¼Ò = 8
1¹øÂ° ¿ä¼Ò = 9
2¹øÂ° ¿ä¼Ò = 6
3¹øÂ° ¿ä¼Ò = 2
4¹øÂ° ¿ä¼Ò = 9
´ë°³ÀÇ °æ¿ì ¼ø¼°ªº¸´Ù´Â ¿ä¼Ò°ªÀÌ ÇÊ¿äÇϹǷΠ¹üÀ§ ±â¹Ý for ·çÇÁ¸¸À¸·Îµµ ¹è¿ÀÇ ¸ðµç °ÍÀ» ÀÐÀ» ¼ö ÀÖ´Ù.
auto ŸÀÔ
auto Ű¿öµå´Â º¯¼ö¿¡ ´ëÀԵǴ °ªÀ» º¸°í ŸÀÔÀ» ÀÚµ¿À¸·Î °áÁ¤Çϴ ŸÀÔÀÌ´Ù. Ãʱâ½ÄÀ̳ª ¹è¿ ¿ä¼ÒÀÇ Å¸ÀÔÀ¸·ÎºÎÅÍ Å¸ÀÔÀ» ÀÚµ¿ °áÁ¤ÇÒ ¼ö ÀÖ´Ù¸é auto Ű¿öµå¸¸ ¾²¸é µÈ´Ù.
#include <stdio.h>
int main()
{
auto i = 1234;
auto d = 3.14;
printf("%d\n", i);
printf("%f\n", d);
}
=> 1234
3.140000
1234·Î ÃʱâÈÇÑ i´Â ´©°¡ ºÁµµ Á¤¼öÇüÀ̸ç 3.14·Î ÃʱâÈÇÑ d´Â ´©°¡ ºÁµµ ½Ç¼öÇüÀÌ´Ù. ÀÌ·² ¶§ int, double ŸÀÔÀ» ÀÏÀÏÀÌ ¹àÈú ÇÊ¿ä ¾øÀÌ auto¶ó°í¸¸ Àû¾îÁÖ¸é µÈ´Ù. auto´Â ŸÀÔÀÌ ¾ø´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÚµ¿À¸·Î Ãß·ÐÇÏ´Â ±â´ÉÀÌ´Ù. µû¶ó¼ Ãß·Ð ±Ù°Å°¡ ÀÖ¾î¾ß ÇÏ¸ç ´ÙÀ½°ú °°ÀÌ ¾²¸é aÀÇ Å¸ÀÔÀ» °áÁ¤ÇÒ ¼ö ¾ø¾î ¿¡·¯ÀÌ´Ù.
auto a; // ¿¡·¯
auto°¡ À¯¿ëÇÑ °æ¿ì´Â ŸÀÔ Ãß·ÐÀ» Á÷Á¢ Çϱ⠱ÍÂúÀ» ¶§ÀÌ´Ù. int³ª doubleÀº ª¾Æ¼ º° ¾î·Á¿òÀÌ ¾øÁö¸¸ ÅÛÇø´ÀÌ ³¢¾îµé¸é ¿ä¼Ò ŸÀÔÀÌ ¹«¾ùÀÎÁö ÀÏÀÏÀÌ ¹àÈ÷±â ±ÍÂú¾ÆÁø´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
const char* str = "korea";
vector<char> vc(&str[0], &str[5]);
for (std::vector<char>::iterator it = vc.begin(); it != vc.end();it++) {
cout << *it;
}
}
¹®ÀÚÇü º¤Å͸¦ ¼øÈ¸ÇÏ´Â ¹Ýº¹ÀÚÀÇ Å¸ÀÔÀÌ std::vector<char>::iterator·Î µÇ¾î ÀÖ¾î ³Ê¹« ±æ°í º¹ÀâÇÏ´Ù. ÄÄÆÄÀÏ·¯°¡ vcÀÇ Å¸ÀÔÀ» ¾Ë°í ÀÖÀ¸¹Ç·Î vc.begin()ÀÌ ¾î¶² ŸÀÔÀ» ¸®ÅÏÇÏ´ÂÁö Ãß·ÐÇÒ ¼ö ÀÖÀ¸¸ç À̶§´Â ´ÙÀ½°ú °°ÀÌ auto·Î ŸÀÔ¸¸ ¹àÇô ÁÖ¸é µÈ´Ù.
for (auto it = vc.begin(); it != vc.end(); it++) {
cout << *it;
}
Äڵ尡 ª¾ÆÁ³°í Àб⵵ ½±´Ù. ÅÛÇø´³¢¸® ÁßøÀÌ ½ÉÇÏ¸é ¹Ýº¹ÀÚ³ª ¿ä¼ÒÀÇ Å¸ÀÔÀ» ÀÏÀÏÀÌ ¹àÈ÷´Â°Ô ±ÍÂúÀº Á¤µµ°¡ ¾Æ´Ï¶ó ¾î·Æ°í ³ÇØÇØÁø´Ù. ÀÌ·² ¶§ ÄÄÆÄÀÏ·¯¿¡°Ô "³Ê ¾Ë¾Æ¼ ÇØ" ¶ó°í ¸í·ÉÇÏ´Â °ÍÀÌ ¹Ù·Î autoÀÌ´Ù. ´Ü¼øÇÑ ¹Ýº¹À̶ó¸é À§ Äڵ庸´Ù´Â ¹üÀ§ ±â¹Ý for¹®ÀÌ ´õ ª°í °£´ÜÇÏ´Ù.
for (char c : vc) {
cout << c;
}
C++ 14¿¡¼´Â ÇÔ¼öÀÇ ¸®ÅÏ Å¸ÀÔ¿¡µµ auto Ű¿öµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. º»Ã¼¿¡¼ ¾î¶² °ªÀ» ¸®ÅÏÇÏ´ÂÁö¸¦ º¸¸é ¸®ÅÏ Å¸ÀÔµµ Ãß·ÐÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ ±â´ÉÀº µæº¸´Ù ½ÇÀÌ ¸¹°í ¹Î°¨ÇÑ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ¾î »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.
auto Add(int a, int b)
{
return a + b;
}
C++ ÀÌÀüÀÇ C¾ð¾î¿¡µµ auto Ű¿öµå°¡ ÀÖ¾ú´Ù. CÀÇ auto´Â ÀÚµ¿À¸·Î »ý¼ºµÇ¾ú´Ù°¡ ¼Ò¸êµÇ´Â Áö¿ª º¯¼ö¸¦ ÀǹÌÇÑ´Ù. ÀÚµ¿ º¯¼ö¶ó°íµµ ºÒ·¶À¸¸ç ¿ÜºÎ º¯¼ö externalÀÇ ¹Ý´ë Àǹ̿´´Ù. ½ÇÁ¦·Î´Â auto¸¦ ºÙÀÌÁö ¾Ê¾Æµµ Ç×»ó auto°¡ ±âº»À̾ú±â ¶§¹®¿¡ °ÅÀÇ ¾²Áö ¾Ê´Â Ű¿öµå¿´´Ù. C++ 11¿¡¼ auto´Â Àǹ̰¡ ¿ÏÀüÈ÷ ¹Ù²î¾î ŸÀÔÀ» ÀÚµ¿ Ãß·ÐÇ϶ó´Â ¶æÀÌ µÇ¾ú´Ù. ±×·¡¼ ´ÙÀ½ ±¸¹®Àº ¿¡·¯ÀÌ´Ù.
auto int i = 1234;
autoµµ ŸÀÔÀ̰í intµµ ŸÀÔÀÌ¾î¼ Å¸ÀÔ ÁöÁ¤ÀÚ°¡ µÎ °³³ª ÀÖ´Â ¼ÀÀÌ¸ç µû¶ó¼ ´ç¿¬È÷ ¿¡·¯ÀÌ´Ù. C¿¡¼´Â ÀÌ ±¸¹®ÀÌ °¡´ÉÇßÁö¸¸ C++¿¡¼´Â ¾ÈµÈ´Ù. ¾Æ¹«¸® »ç¿ë ºóµµ°¡ ¶³¾îÁö´õ¶ó°í ¾ö¿¬ÇÑ Å°¿öµå¿´´Âµ¥ ÀÌ·± ½ÄÀ¸·Î ¿ëµµ¸¦ ¿ÏÀüÈ÷ ¹Ù²Ù¾î ¹ö¸®´Â °ÍÀº ÈçÇÑ ÄÉÀ̽º°¡ ¾Æ´Ï´Ù.
nullptr
Æ÷ÀÎÅͰ¡ ºñ¾î ÀÖÀ½À» ³ªÅ¸³»´Â ¸®ÅÍ·²ÀÌ¸ç °ú°ÅÀÇ NULLÀ̳ª 0°ú °°Àº °ªÀÌ´Ù. Æ÷ÀÎÅͰ¡ ¹«È¿ÇÔÀ» ºÐ¸íÈ÷ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°ÀÌ ¾´´Ù.
#include <stdio.h>
#include <malloc.h>
int main()
{
void* mem = nullptr;
mem = malloc(100);
if (mem == nullptr) {
return;
}
free(mem);
}
ÃʱâÈÇÒ ¶§³ª ºñ±³ÇÒ ¶§ nullptr·Î ¾²¸é Æ÷ÀÎÅÍ ºñ±³ÀÓÀ» ºÐ¸íÈ÷ ¾Ë ¼ö ÀÖ¾î °¡µ¶¼ºÀÌ Çâ»óµÈ´Ù. 0À̳ª NULL¿¡ ºñÇØ Æ÷ÀÎÅÍ Å¸ÀÔÀÓÀÌ ºÐ¸íÇØ ¾Ö¸ÅÇÏÁö ¾Ê´Ù´Â ÀÌÁ¡µµ ÀÖ´Ù.
#include <stdio.h>
void func(int a) { printf("%d\n", a); }
void func(int *p) { printf("%p\n", p); }
int main()
{
func(0);
func(nullptr);
func(NULL); // ¾Ö¸ÅÇÔ
}
Á¤¼ö¸¦ ¹Þ´Â func ÇÔ¼ö¿Í Á¤¼öÇü Æ÷ÀÎÅ͸¦ ¹Þ´Â func ÇÔ¼ö°¡ ¿À¹ö·ÎµùµÇ¾î ÀÖ´Ù. ÀÌ »óÅ¿¡¼ func(0)³ª func(nullptr)ÀÌ ¾î¶² ÇÔ¼ö¸¦ È£ÃâÇÒÁö´Â ´©°¡ ºÁµµ ¸í¹éÇÏ´Ù. ±×·¯³ª func(NULL)ÀÌ ¾î¶² ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀÎÁö´Â Á¤È®ÇÏ°Ô ÃßÃøÇÏ±â ¾î·Æ´Ù.
NULLÀº ¾ð¾î¿¡ µû¶ó Á¤Àǰ¡ ´Þ¶óÁö´Âµ¥ C++¿¡¼´Â 0À̸ç C¿¡¼´Â (void *)0À¸·Î Á¤ÀǵǾî ÀÖ¾î °á°ú°¡ ÀϰüµÇÁöµµ ¸øÇÏ´Ù. ÀÌ·± ¹Ì¼¼ÇÑ Â÷ÀÌÁ¡ÀÌ ¾Ë ¼ö ¾ø´Â ¹ö±×ÀÇ ¿øÈäÀÌ µÇ±âµµ ÇÑ´Ù.
°ú°ÅÀÇ È£È¯¼ºÀ» À¯ÁöÇØ¾ß ÇϹǷΠ¾ÕÀ¸·Îµµ NULLÀ̳ª 0µµ ¿©ÀüÈ÷ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Æ÷ÀÎÅÍ¿¡ ´ëÇÑ ³Î Ç¥ÇöÀº °¡±ÞÀû nullptr·Î Ç¥±âÇÏ´Â °ÍÀÌ °¡µ¶¼º¿¡ À¯¸®ÇÏ´Ù.
¿°ÅÇü Ŭ·¡½º
CÀÇ ¿°ÅÇüÀÎ enumÀº ¿°Å »ó¼öÀÇ ¹üÀ§°¡ Àü¿ªÀÌ¾î¼ ºÒÆíÇÑ ¸éÀÌ ¸¹´Ù. ´Ù¸¥ ŸÀÔÀÇ ¾ó°ÅÇü³¢¸®µµ ¿°Å »ó¼ö°¡ Áߺ¹µÇ¾î¼´Â ¾ÈµÇ¸ç ¼·Î °ªÀ» ´ëÀÔÇÒ ¼ö ÀÖ¾î È¥¶õ½º·´´Ù.
enum Origin { EAST, WEST, SOUTH, NORTH };
enum Race { Terran, Protoss, Zerg };
int o = SOUTH;
o = Zerg;
printf("%d", o); // 2
¹æÇâÀ» ±¸ºÐÇÏ´Â Origin ¿°ÅÇü°ú Á¾Á·À» ±¸ºÐÇÏ´Â Race ¿°ÅÇüÀ» ¼±¾ðÇß´Ù. ³²ÂÊÀ» ÀǹÌÇÏ´Â SOUTH³ª Àú±× Á¾Á·À» ÀǹÌÇÏ´Â Zerg´Â µÑ ´Ù 2ÀÇ °ªÀ» °¡Áö¸ç Á¤¼öÇü º¯¼ö¿¡ º° ÀÌ»ó¾øÀÌ ´ëÀÔÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯´Ù º¸´Ï SOUTH¶ó°í Àû¾î¾ß ÇÒ ºÎºÐ¿¡ Zerg·Î Àû¾îµµ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Æ ÀáÀçÀûÀ¸·Î À§ÇèÇÏ´Ù.
¿°Å »ó¼ö°¡ Àü¿ªÀÇ Æ¯¼ºÀ» °¡Áö¹Ç·Î ¾îµð¼³ª À̸§¸¸À¸·Î »ç¿ëÇÒ ¼ö ÀÖ¾î °£ÆíÇÏÁö¸¸ ¿°ÅÇü³¢¸® »ó¼ö°¡ Áߺ¹µÇ¾î¼´Â ¾ÈµÈ´Ù´Â Á¦¾àµµ ÀÖ´Ù. ´ÙÀ½ ¼±¾ð¹®Àº ¿¡·¯ÀÌ´Ù. EAST°¡ Origin¿¡ 0À¸·Î ÀÌ¹Ì Á¤ÀǵǾî Àִµ¥ Race¿¡¼ 3À¸·Î ´Ù½Ã Á¤ÀÇÇÏ·Á°í ÇßÀ¸´Ï Áߺ¹ ¼±¾ðÀÌ´Ù.
enum Race { Terran, Protoss, Zerg, EAST };
°Å´ë ÇÁ·ÎÁ§Æ®¿¡¼ ¿©±â Àú±â¼ ¿°ÅÇüÀ» ¸¹ÀÌ »ç¿ëÇÏ¸é ¸íĪ Áߺ¹ÀÌ ¹ß»ýÇÒ È®·üÀÌ ³ô´Ù. ÀÌ·± ¹®Á¦¸¦ ¹æÁöÇϱâ À§ÇØ ¿°Å »ó¼ö¸¶´Ù Á¢µÎ¸¦ ºÙ¿© oEast, rTerran µûÀ§·Î °íÀ¯¼ºÀ» ºÎ¿©ÇØ¾ß Çϴµ¥ ¿©·¯ ¸ð·Î ºÒÆíÇÏ´Ù. ÀÌ·± ºÒÆíÇÔÀ» ÇØ¼ÒÇϱâ À§ÇØ enum class¸¦ µµÀÔÇß´Ù.
- ¿°Å »ó¼ö´Â ¿°Å Ŭ·¡½º¿¡ ¼Ò¼ÓµÇ¸ç Àü¿ªÀÌ ¾Æ´Ï¾î¼ ´Ù¸¥ ¿°ÅÇü°ú ¸íĪÀÌ Áߺ¹µÇµµ »ó°ü ¾ø´Ù.
- ¿°Å »ó¼ö¸¦ ĪÇÒ ¶§´Â ¿°ÅÇü::»ó¼ö ½ÄÀ¸·Î ĪÇÑ´Ù.
- Á¤¼öÇü°ú ȣȯµÇÁö ¾Ê¾Æ ij½ºÆÃÀ» ÇØ¾ß¸¸ ´ëÀÔÇÒ ¼ö ÀÖ´Ù.
CÀÇ ¿°ÅÇüÀº ¹üÀ§°¡ ¾ø´Âµ¥ ºñÇØ C++ÀÇ ¿°Å Ŭ·¡½º´Â ¹üÀ§°¡ ÀÖ´Ù´Â °ÍÀÌ °¡Àå Å« Â÷ÀÌÁ¡ÀÌ´Ù. ¹æÇâ ¿°ÅÇüÀ» Ŭ·¡½º·Î Á¤ÀÇÇÏ¸é ´ÙÀ½°ú °°´Ù. ¾îÂ÷ÇÇ ¼Ò¼ÓÀ» ¹àÈ÷°í ¾²¹Ç·Î ²À ´ë¹®ÀÚ·Î ¾²Áö ¾Ê¾Æµµ »ó°ü ¾ø´Ù.
enum class EOrigin { east, west, south, north };
int o = (int)EOrigin::south;
printf("%d", o); // 2
enum Ű¿öµå ´ÙÀ½¿¡ class Ű¿öµå¸¦ Ãß°¡ÇÏ¿© ¼±¾ðÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é ¿°Å »ó¼ö¸¦ ĪÇÒ ¶§ ´Üµ¶À¸·Î´Â ¾µ ¼ö ¾ø°í EOrigin::south ½ÄÀ¸·Î ¼Ò¼ÓÀ» ¹Ýµå½Ã ¹àÇô¾ß ÇÑ´Ù. ¶ÇÇÑ Á¤¼öÇü°ú ȣȯµÇÁö ¾Ê¾Æ ´ëÀÔÇÒ ¶§´Â °Á¦·Î ij½ºÆÃÇØ¾ß ÇÏ¸ç ½Ç¼ö¸¦ ÁÙ¿© ÁØ´Ù.
¿°ÅÇüÀº ±âº»ÀûÀ¸·Î int¿Í ŸÀÔ°ú Å©±â°¡ °°¾Æ ¿°Å »ó¼ö Çϳª°¡ 4¹ÙÀÌÆ®¸¦ Â÷ÁöÇÑ´Ù. 40¾ï°³ÀÇ °¡Áö¼ö¸¦ ±¸ºÐÇÏ´Â Á¤¼öÇüÀº ¿°ÅÇüÀ¸·Î ¾²±â¿¡´Â ³Ê¹« Å©´Ù. ¿°Å »ó¼öÀÇ °¡Áö¼ö°¡ ¸¹Áö ¾ÊÀ» ¶§´Â º£À̽º ŸÀÔÀ» ÁöÁ¤ÇÏ¿© ¸Þ¸ð¸®¸¦ Á¶±ÝÀ̳ª¸¶ Àý¾àÇÒ ¼ö ÀÖ´Ù.
enum class EOrigin : char { east, west, south, north };
printf("%d", sizeof(EOrigin::south)); // 1
EOriginÀÇ Å¸ÀÔÀ» char·Î ÁöÁ¤Çß´Ù. char ŸÀÔ¸¸ ÇØµµ 256°¡ÁöÀÇ »óŸ¦ ±¸ºÐÇÒ ¼ö ÀÖ´Ù. sizeof·Î ¿°Å »ó¼öÀÇ Å©±â¸¦ Ãâ·ÂÇØ º¸¸é 1¹ÙÀÌÆ®ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. ¸Þ¸ð¸®¸¦ ¾Ë¶ãÇÏ°Ô ¾µ ¼ö ÀÖ´Ù´Â ÀÌÁ¡ÀÌ ÀÖÁö¸¸ º°·Î ±ÇÇÒ¸¸ÇÏÁö ¾Ê´Ù. Á¤¼ö´Â 32ºñÆ®°¡ °¡Àå È¿À²ÀûÀ¸·Î µ¿ÀÛÇϸç Å©±â¸¦ ÁÙÀÌ¸é ¿ÀÈ÷·Á ¼Óµµ°¡ ¶³¾îÁø´Ù.
¿°Å Ŭ·¡½º´Â ¿°ÅÇüº¸´Ù´Â ¹®¹ýÀûÀ¸·Î Çâ»óµÇ¾úÁö¸¸ ±×·¸´Ù°í ÇØ¼ CÀÇ enumÀÌ ¸ø ¾µ Á¤µµ´Â ¾Æ´Ï´Ù. ¿°ÅÇüÀÌ ¸¹Áö ¾Ê°í °£´ÜÇÑ ¿ëµµ·Î ¾´´Ù¸é ¿ÀÈ÷·Á ¿°Å Ŭ·¡½º°¡ ´õ ÀåȲÇÏ°í °É¸®Àû°Å¸°´Ù. ¿°Å Ŭ·¡½º°¡ ¿°ÅÇüÀ» ¿ÏÀüÈ÷ ´ëüÇѴٱ⺸´Ù´Â Çʿ信 µû¶ó Àû´çÇÑ °ÍÀ» ¾²´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
¶÷´Ù
¶÷´Ù´Â ÇÔ¼ö¸¦ °£·«ÇÏ°Ô Ç¥ÇöÇÏ´Â ´ÜÃà Ç¥±â¹ýÀÌ´Ù. C#À̳ª ÀÚ¹Ù¿¡´Â ¹ú½á µµÀԵǾúÁö¸¸ C++¿¡¼´Â ´Ù¼Ò ´Ê°Ô µµÀԵǾú´Ù. ¼±¾ð Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
[ĸó](Àμö)->¸®ÅÏŸÀÔ { º»Ã¼; }
°á±¹ ÇÔ¼ö ¼±¾ð¹®¿¡ ÀÖ´Â ¿ä¼Ò´Â °ÅÀÇ ´Ù Æ÷ÇԵǾî ÀÖ´Â ¼ÀÀÌ´Ù. °£´ÜÇÏ°Ô µÎ Á¤¼ö¸¦ ´õÇÏ´Â ÇÔ¼ö¸¦ ¶÷´Ù·Î ÀÛ¼ºÇØ º¸ÀÚ.
int (*add)(int, int) = [](int a, int b)->int {return a + b; };
printf("%d\n", add(2, 3)); // 5
a, b µÎ °³ÀÇ Á¤¼öÇüÀ» ¹Þ¾Æ µÎ Á¤¼öÀÇ ÇÕÀ» int ŸÀÔÀ¸·Î ¸®ÅÏÇÏ´Â ¶÷´Ù½ÄÀ» Á¤ÀÇÇϰí ÀÌ °ªÀ» ÇÔ¼ö Æ÷ÀÎÅÍ add¿¡ ´ëÀÔÇß´Ù. ´ëÀÔ¹®À̱⠶§¹®¿¡ Á¦ÀÏ µÚ¿¡µµ ¼¼¹ÌÄÝ·ÐÀÌ ÇÊ¿äÇÏ´Ù.
add´Â µÎ °³ÀÇ Á¤¼ö¸¦ ¹Þ¾Æ Á¤¼ö¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö Æ÷ÀÎÅÍÀÌ´Ù. ÀÌÈÄ add¸¦ ÇÔ¼öó·³ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö Æ÷ÀÎÅÍ Å¸ÀÔ Á¤Àǰ¡ ¾î·Á¿ì¸é ÀÌ ÀÚ¸®¿¡ ±×³É auto¶ó°í ¾²¸é ÄÄÆÄÀÏ·¯°¡ ŸÀÔÀ» Ãß·ÐÇØ ÁØ´Ù.
auto add = [](int a, int b)->int {return a + b; };
¶÷´Ù´Â ÃÖ´ëÇÑ Âª°Ô ¾²±â À§ÇØ µµÀÔÇÑ °ÍÀÌ¾î¼ ¿©·¯ ¿ä¼Ò¸¦ »ý·«ÇÒ ¼ö ÀÖ´Ù. À§ ±¸¹®¿¡¼ ¸®ÅÏ Å¸ÀÔÀº »ý·« °¡´ÉÇÏ´Ù.
auto add = [](int a, int b) {return a + b; };
C#À̳ª ÀÚ¹Ù¿¡ ºñÇØ ÀμöÀÇ Å¸ÀÔÀ̳ª return Ű¿öµå´Â »ý·«ÇÒ ¼ö ¾ø´Ù. Àμö°¡ ¾øÀ¸¸é Àμö ¸ñ·ÏÀÇ °ýÈ£¸¦ »ý·«ÇÒ ¼ö ÀÖ°í ¸®ÅÏ Å¸ÀÔÀÌ ¾ø´Â void ÇÔ¼ö¶ó¸é return Ű¿öµåµµ »ý·«ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Àμöµµ ¾ø°í ¸®Åϵµ ¾ø´Â ´Ü¼ø Ãâ·Â¹®À» ¶÷´Ù·Î Á¤ÀÇÇÏ¿© È£Ãâ±îÁö ÇÏ´Â ÄÚµåÀÌ´Ù.
[] { printf("Hello C++"); }();
¶÷´Ù°¡ ÀÏ¹Ý ÇÔ¼ö¿Í ´Ù¸¥ Á¡Àº Á¤Àǹ®À» ¹Ù·Î ÀζóÀÎÈÇÏ¿© ¼ö½Ä¿¡ Áý¾î ³ÖÀ» ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. printfÀÇ Àμö¿¿¡¼ ¶÷´Ù¸¦ »ý¼ºÇϰí Àμö±îÁö ³Ñ°Ü È£ÃâÇØ ¹ö¸®¸é µÈ´Ù.
printf("%d\n", [](int a, int b)->int {return a + b; }(2, 3));
ĸó´Â ¶÷´Ù ¿ÜºÎÀÇ º¯¼ö¸¦ ¶÷´Ù½Ä¿¡¼ ÂüÁ¶ÇÒ ¶§ ¶÷´Ù½Ä ½ÇÇà Á⵿ֱ¾ÈÀº ÇØ´ç º¯¼öÀÇ °ªÀ» À¯ÁöÇØÁÖ´Â ±â´ÉÀÌ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.
#include <stdio.h>
auto getfunc()
{
int base = 1;
auto add = [base](int a, int b) {return a + b + base; };
return add;
}
int main()
{
auto add = getfunc();
printf("%d\n", add(2, 3)); // 6
}
base´Â getfuncÀÇ Áö¿ª º¯¼öÀÌ¸ç ¶÷´Ù½Ä ³»ºÎ¿¡¼ ÂüÁ¶Çϰí ÀÖ´Ù. ¶÷´Ùµµ getfunc ³»ºÎ¿¡ ÀÖÁö¸¸ ÀÌ ¶÷´Ù°¡ ½ÇÇàµÉ ¶§ base°¡ ³²¾Æ ÀÖ´Ù°í º¸ÀåÇÒ ¼ö´Â ¾ø´Ù. ±×·¡¼ ĸó ±¸¹®¿¡ [base]¸¦ ¸í½ÃÇÏ¿© ¶÷´Ù½ÄÀÌ ½ÇÇàµÇ´Â µ¿¾È¿¡´Â base°¡ À¯È¿Çϵµ·Ï º¸ÀåÇØ ÁÖ¾î¾ß ÇÑ´Ù.
main¿¡¼ getfunc¸¦ È£ÃâÇÏ¿© ¶÷´Ù½Ä add¸¦ ±¸Çϰí add¸¦ ÅëÇØ 2, 3 ±×¸®°í base±îÁö ´õÇØ 6À» °è»êÇß´Ù. base´Â getfuncÀÇ Áö¿ª º¯¼öÀÌÁö¸¸ main¿¡¼ add¸¦ È£ÃâÇÒ ¶§±îÁö ±× °ªÀ» À¯ÁöÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ĸó´Â ÇØ´ç º¯¼ö°¡ ¹üÀ§¸¦ ¹þ¾î³ª´õ¶óµµ ¶÷´Ù½Ä ³»¿¡¼ À¯È¿Çϵµ·Ï Àâ¾Æ µÎ´Â ±â´ÉÀÌ´Ù.
[ ] °ýÈ£¾È¿¡ ĸóÇÒ º¯¼ö ¸ñ·ÏÀ» ÀûµÇ = ±âÈ£¸¦ ¾²¸é ¸ðµç ¿ÜºÎ º¯¼öÀÇ »çº»À» º¹»çÇϰí & ±âÈ£¸¦ ¾²¸é ¸ðµç ¿ÜºÎ º¯¼öÀÇ ÂüÁ¶¸¦ º¹»çÇÑ´Ù. À̺¥Æ® Çڵ鷯¸¦ ¶÷´Ù·Î Á¤ÀÇÇÒ ¶§ Á¤ÀÇ ½ÃÁ¡ÀÇ Áö¿ª º¯¼ö°ªÀ» Çڵ鷯¿¡¼ Àоî¾ß ÇÒ ¶§ ĸó ±â´ÉÀ» »ç¿ëÇÑ´Ù.

µ· ¸ø ¹ú¾îµµ ÁÁ´Ù. Áñ°Ì°Ô »ì¸é µÈ´Ù. |