ÀÌ Ä³½ºÆ® ¿¬»êÀÚ´Â Æ÷ÀÎÅÍÀÇ »ó¼ö¼º¸¸ º¯°æÇÏ°í ½ÍÀ» ¶§ »ç¿ëÇÑ´Ù. »ó¼ö Áö½Ã Æ÷ÀÎÅ͸¦ ºñ»ó¼ö Áö½Ã Æ÷ÀÎÅÍ·Î Àá½Ã ¹Ù²Ù°í ½ÍÀ» ¶§ const_cast ¿¬»êÀÚ¸¦ ¾´´Ù. ¹Ý´ëÀÇ °æ¿ìµµ ¹°·Ð ÀÌ ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ°ÚÁö¸¸ ºñ»ó¼ö Áö½Ã Æ÷ÀÎÅÍ´Â »ó¼ö Áö½Ã Æ÷ÀÎÅÍ·Î Ç×»ó º¯È¯ °¡´ÉÇϹǷΠij½ºÆ® ¿¬»êÀÚ¸¦ ¾µ Çʿ䰡 ¾ø´Ù. ±×³É ´ëÀÔ¸¸ ÇÏ¸é µÈ´Ù.
ÀÌ ¿¬»êÀÚ´Â Æ÷ÀÎÅÍÀÇ const ¼Ó¼ºÀ» ³Ö°Å³ª »©°Å³ª ÇÒ ¼ö ÀÖÀ¸¸ç Àß »ç¿ëµÇÁö´Â ¾ÊÁö¸¸ ºñ½ÁÇÑ ¼º°ÝÀÇ ÁöÁ¤ÀÚÀÎ volatile ¼Ó¼º°ú __unaligned ¼Ó¼º¿¡ ´ëÇØ¼µµ º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÌ Ä³½ºÆ® ¿¬»êÀÚ ¿ÜÀÇ ´Ù¸¥ ij½ºÆ® ¿¬»êÀÚ´Â Æ÷ÀÎÅÍÀÇ »ó¼ö¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Ù. ¹°·Ð CÀÇ Ä³½ºÆ® ¿¬»êÀڷδ ¸¶À½´ë·Î ÇÒ ¼ö ÀÖÁö¸¸ ¸»ÀÌ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.
|
¿¹ Á¦ : const_cast |
#include <Turboc.h>
void main()
{
char str[]="string";
const char *c1=str;
char *c2;
c2=const_cast<char *>(c1);
c2[0]='a';
printf("%s\n",c2);
}
»ó¼ö Áö½Ã Æ÷ÀÎÅÍ c1Àº ºñ»ó¼ö Áö½Ã Æ÷ÀÎÅÍ strÀ» º°´Ù¸¥ Á¦¾à¾øÀÌ ´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ´ëÀÔ¹ÞÀº Æ÷ÀÎÅ͸¦ ´Ù¸¥ ºñ»ó¼ö Áö½Ã Æ÷ÀÎÅÍ c2¿¡ ´ëÀÔÇϰíÀÚ ÇÒ ¶§´Â c2=c1À¸·Î ¹Ù·Î ´ëÀÔÇÒ ¼ö ¾ø´Ù. µÎ Æ÷ÀÎÅÍÀÇ »ó¼ö¼ºÀÌ ´Ù¸£¸ç c1ÀÌ °¡¸®Å°´Â Àбâ Àü¿ë °ªÀ» c2·Î ºÎÁÖÀÇÇÏ°Ô ¹Ù²ã ¹ö¸± À§ÇèÀÌ Àֱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ °æ¿ì c1ÀÌ °¡¸®Å°´Â ´ë»ó(ÃÖÃÊ ´ëÀÔ¹ÞÀº str)ÀÌ º¯°æ °¡´ÉÇÑ ´ë»óÀ̶ó´Â °ÍÀ» È®½ÇÈ÷ ¾Ë°í ÀÖÀ¸¹Ç·Î c1ÀÇ »ó¼ö¼º¸¸ Àá½Ã ¹«½ÃÇÏ¸é ´ëÀÔ °¡´ÉÇÏ´Ù. À̶§ const_cast ¿¬»êÀÚ·Î c1À» char *·Î ij½ºÆÃÇÒ ¼ö ÀÖ´Ù.
¸¸¾à strÀÌ char *·Î ¼±¾ðµÇ¾î ÀÖ´Ù¸é À̶§ strÀº ½ÇÇà ÆÄÀÏÀÇ ÀϺκÐÀ» °¡¸®Å°°í ÀÖÀ¸¹Ç·Î º¯°æÇÒ ¼ö ¾ø´Ù. ÀÌ °æ¿ì Æ÷ÀÎÅÍÀÇ »ó¼ö¼ºÀ» ÇԺηΠº¯°æÇϸé À§ÇèÇØÁø´Ù. ÀÌ ¿¬»êÀÚ´Â º¯¼öÀÇ »ó¼ö¼º¸¸ º¯°æÇÒ ¼ö ÀÖÀ» »ÓÀÌ¸ç ±× ¿ÜÀÇ Å¸ÀÔ º¯È¯Àº Çã¿ëÇÏÁö ¾Ê´Â´Ù. Æ÷ÀÎÅÍÀÇ ´ë»óü ŸÀÔÀ» ¹Ù²Û´Ù°Å³ª ±âº» ŸÀÔÀ» ´Ù¸¥ ŸÀÔÀ¸·Î ¹Ù²Ù´Â °Íµµ Çã¿ëµÇÁö ¾Ê´Â´Ù. ±×·¡¼ ´ÙÀ½ ÄÚµå´Â ¸ðµÎ ¿¡·¯·Î 󸮵ȴÙ.
int *pi=const_cast<int *>(c1);
d=const_cast<double>(i);
Á¤¼ö¸¦ ½Ç¼öÇü ŸÀÔÀ¸·Î º¯È¯ÇÏ´Â °ÍÀº »ó½Â º¯È¯À̹ǷΠ´ç¿¬È÷ °¡´ÉÇÏÁö¸¸ const_cast´Â À̰ÍÁ¶Â÷µµ Çã¿ëÇÏÁö ¾Ê´Â´Ù. ±×³É d=i; ¶ó°í ´ëÀÔÇÏ¸é ¹¬½ÃÀû »ó½Â º¯È¯¿¡ ÀÇÇØ ´ëÀÔ °¡´ÉÇѵ¥µµ ¸»ÀÌ´Ù. ÀÌó·³ const_cast´Â ¿À·ÎÁö Æ÷ÀÎÅÍÀÇ »ó¼ö¼º¸¸À» º¯°æÇÒ ¼ö ÀÖ´Ù. ±×·¡¼ »ó¼ö¼ºÀ» º¯°æÇÒ ¶§ ÀÌ Ä³½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é ´Ù¸¥ ¾û¶×ÇÑ º¯È¯À» ÇÇÇÒ ¼ö ÀÖ¾î ´õ ¾ÈÀüÇϸç Äڵ带 Àд »ç¶÷µµ ¾î¶² Àǵµ·Î ÀÌ Ä³½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇß´ÂÁö ½±°Ô ÆÄ¾ÇÇÒ ¼ö ÀÖ´Ù.
ij½ºÆ® ¿¬»êÀÚÀÇ ±â´ÉÀ» ƯÁ¤ÇÑ º¯È¯À¸·Î¸¸ Á¦ÇÑÇØ µÎ¸é ¹«ºÐº°ÇÑ »ç¿ëÀ¸·Î ÀÎÇÑ »ç°í¸¦ ¿¹¹æÇÒ ¼ö Àִµ¥ ÀüÅëÀûÀÎ C ij½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇÑ ´ÙÀ½ Äڵ带 º¸ÀÚ.
const char *c1;
char *c2;
c2=(char *)c1;
c1ÀÇ »ó¼ö¼ºÀ» Àá½Ã ¾ø¾Ö c2¿¡ ´ëÀÔÇϱâ À§ÇØ (char *) ij½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇß´Ù. ÀÌ »óÅ¿¡¼ ¾î¶² ÀÌÀ¯·Î c1À» const double *·Î º¯°æÇß´Ù°í ÇÏÀÚ. º¯¼öÀÇ Å¸ÀÔÀ» ¹Ù²Ù¾î¾ß ÇÏ´Â °æ¿ì´Â °³¹ßÁß¿¡ Á¾Á¾ ÀÖ´Â ÀÏÀε¥ c1ÀÌ °¡¸®Å°´Â ´ë»óÀÌ char¿¡¼ double·Î ¹Ù²ï °ÍÀÌ´Ù. ±×·¯¸é ¾ÖÃÊ¿¡ »ó¼ö¼ºÀ» ¾ø¾Ö±â À§ÇØ (char *) ¿¬»êÀÚ¸¦ »ç¿ëÇߴµ¥ Àǹ̰¡ ¿ÏÀüÈ÷ ¹Ù²î¾î ¹ö·Á ŸÀÔÀ» º¯°æÇ϶ó´Â ¸í·ÉÀÌ µÇ¾î ¹ö¸°´Ù. ÇÏÁö¸¸ ÄÄÆÄÀÏ·¯´Â ¿©ÀüÈ÷ ¾Æ¹«·± ÁöÀû¾øÀÌ ¸¸»ç OKÀÌ´Ù.
c1ÀÌ const double *·Î ¹Ù²î¾ú´Ù¸é c2·Î ´ç¿¬È÷ double *·Î ¹Ù²î¾î¾ß Çϴµ¥ ÄÄÆÄÀÏ·¯°¡ ¾Æ¹«·± ºÒÆòÀÌ ¾øÀ¸¹Ç·Î °³¹ßÀÚ°¡ À̸¦ ¾ËÁö ¸øÇÏ°í ³Ñ¾î°¥ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¼³»ç °³¹ßÀÚ°¡ ¹®Á¦°¡ ÀÖÀ» °ÍÀ̶ó´Â ÃßÃøÀ» ÇÒ ¼ö ÀÖ´Ù ÇÏ´õ¶óµµ ¼Ò½º¸¦ ÀÏÀÏÀÌ ´Ù µÚÁ® ŸÀÔ º¯°æ¿¡ ´ëÇÑ µÞ󸮸¦ ÇÏ´Â °ÍÀº ¹«Ã´ ±ÍÂú°í ÀϺθ¦ ¼öÁ¤ÇÏÁö ¾Ê´Â ´©¶ôÀÇ À§Çèµµ ÀÖ´Ù. ±×·¯³ª ´ÙÀ½°ú °°ÀÌ Ä³½ºÆÃÀ» Çß´Ù°í ÇØ º¸ÀÚ.
c2=const_cast<char *>(c1);
ÀÌ·¸°Ô ÇÏ¸é »ó¼ö¼º º¯°æ¸¸À» ¿øÇÑ´Ù´Â °ÍÀ» ºÐ¸íÈ÷ Ç¥½ÃÇÏ´Â °ÍÀ̸ç c1ÀÇ Å¸ÀÔÀÌ ¿ÏÀüÈ÷ ¹Ù²î¾î ¹ö¸®¸é ´çÀå ¿¡·¯·Î 󸮵ȴÙ. µû¶ó¼ °³¹ßÀڴ ŸÀÔ º¯°æ¿¡ ´ëÇØ Ãß°¡·Î ´õ ¾î¶² ÀÛ¾÷À» ÇØ¾ß ÇÏ´ÂÁö¸¦ Áï½Ã ¾Ë°Ô µÇ°í »ç°í¸¦ ¹Ì¿¬¿¡ ¹æÁöÇÒ ¼ö ÀÖ´Ù. CÀÇ Ä³½ºÆ® ¿¬»êÀÚ´Â º¯È¯ÀÇ ¹üÀ§°¡ ³Ê¹« ³ÐÀºµ¥ ºñÇØ C++ÀÇ Ä³½ºÆ® ¿¬»êÀÚ´Â ±â´ÉÀÌ Á¦ÇÑÀûÀÌ´Ù.