c/c++Ç¿ÖÆÀàÐÍת»»
Q:ʲôÊÇC·ç¸ñת»»£¿Ê²Ã´ÊÇstatic_cast, dynamic_cast ÒÔ¼° reinterpret_cast£¿Çø±ðÊÇʲô£¿ÎªÊ²Ã´Òª×¢Ò⣿
A:ת»»µÄº¬ÒåÊÇͨ¹ý¸Ä±äÒ»¸ö±äÁ¿µÄÀàÐÍΪ±ðµÄÀàÐÍ´Ó¶ø¸Ä±ä¸Ã±äÁ¿µÄ±íʾ·½Ê½¡£ÎªÁËÀàÐÍת»»Ò»¸ö¼òµ¥¶ÔÏóΪÁíÒ»¸ö¶ÔÏóÄã»áʹÓô«Í³µÄÀàÐÍת»»²Ù×÷·û¡£±ÈÈ磬ΪÁËת»»Ò»¸öÀàÐÍΪdouboleµÄ¸¡µãÊýµÄÖ¸Õëµ½ÕûÐÍ£º
´úÂë:
int i;
double d;
i = (int) d;
»òÕߣº
i = int (d);
¶ÔÓÚ¾ßÓбê×¼¶¨Òåת»»µÄ¼òµ¥ÀàÐͶøÑÔ¹¤×÷µÄºÜºÃ¡£È»¶ø£¬ÕâÑùµÄת»»·ûÒ²Äܲ»·ÖÔí°×µÄÓ¦ÓÃÓÚÀࣨclass£©ºÍÀàµÄÖ¸Õë¡£ANSI-C++±ê×¼¶¨ÒåÁËËĸöеÄת»»·û£º'reinterpret_cast', 'static_cast', 'dynamic_cast' ºÍ 'const_cast'£¬Ä¿µÄÔÚÓÚ¿ØÖÆÀà(class)Ö®¼äµÄÀàÐÍת»»¡£
´úÂë:
reinterpret_cast<new_type>(expression)
dynamic_cast<new_type>(expression)
static_cast<new_type>(expression)
const_cast<new_type>(expression)
1 reinterpret_cast
'reinterpret_cast'ת»»Ò»¸öÖ¸ÕëΪÆäËüÀàÐ͵ÄÖ¸Õë¡£ËüÒ²ÔÊÐí´ÓÒ»¸öÖ¸Õëת»»ÎªÕûÊýÀàÐÍ¡£·´Ö®ÒàÈ»¡££¨Òë×¢£ºÊÇÖ¸Õë¾ßÌåµÄµØÖ·Öµ×÷ΪÕûÊýÖµ£¿£©
Õâ¸ö²Ù×÷·ûÄܹ»ÔÚ·ÇÏà¹ØµÄÀàÐÍÖ®¼äת»»¡£²Ù×÷½á¹ûÖ»ÊǼòµ¥µÄ´ÓÒ»¸öÖ¸Õëµ½±ðµÄÖ¸ÕëµÄÖµµÄ¶þ½øÖÆ¿½±´¡£ÔÚÀàÐÍÖ®¼äÖ¸ÏòµÄÄÚÈݲ»×öÈκÎÀàÐ͵ļì²éºÍת»»¡£
Èç¹ûÇé¿öÊÇ´ÓÒ»¸öÖ¸Õëµ½ÕûÐ͵Ŀ½±´£¬ÄÚÈݵĽâÊÍÊÇϵͳÏà¹ØµÄ£¬ËùÒÔÈκεÄʵÏÖ¶¼²»ÊÇ·½±ãµÄ¡£Ò»¸öת»»µ½×ã¹»´óµÄÕûÐÍÄܹ»°üº¬ËüµÄÖ¸ÕëÊÇÄܹ»×ª»»»ØÓÐЧµÄÖ¸ÕëµÄ¡£
´úÂë:
class A {};
class B {};
A * a = new A;
B * b = reinterpret_cast<B *>(a);
'reinterpret_cast'¾ÍÏñ´«Í³µÄÀàÐÍת»»Ò»Ñù¶Ô´ýËùÓÐÖ¸ÕëµÄÀàÐÍת»»¡£
2 static_cast
'static_cast'ÔÊÐíÖ´ÐÐÈÎÒâµÄÒþʽת»»ºÍÏ෴ת»»¶¯×÷¡££¨¼´Ê¹ËüÊDz»ÔÊÐíÒþʽµÄ£©
Ó¦Óõ½ÀàµÄÖ¸ÕëÉÏ£¬Òâ˼ÊÇ˵ËüÔÊÐí×ÓÀàÀàÐ͵ÄÖ¸Õëת»»Îª¸¸ÀàÀàÐ͵ÄÖ¸Õ루ÕâÊÇÒ»¸öÓÐЧµÄÒþʽת»»£©£¬Í¬Ê±£¬Ò²Äܹ»Ö´ÐÐÏà·´¶¯×÷£º×ª»»¸¸ÀàΪËüµÄ×ÓÀà¡£
ÔÚÕâ×îºóÀý×ÓÀ±»×ª»»µÄ¸¸ÀàûÓб»¼ì²éÊÇ·ñÓëÄ¿µÄÀàÐÍÏàÒ»Ö¡£
´úÂ룺
class Base {};
class Derived : public Base {};
Base *a = new Base;
Derived *b = static_cast<Derived *>(a);
'static_cast'³ýÁ˲Ù×÷ÀàÐÍÖ¸Õ룬ҲÄÜÓÃÓÚÖ´ÐÐÀàÐͶ¨ÒåµÄÏÔʽµÄת»»£¬ÒÔ¼°»ù´¡ÀàÐÍÖ®¼äµÄ±ê׼ת»»:
´úÂë:
double d = 3.14159265;
int i = static_c
Ïà¹ØÎĵµ£º
ÒýÑÔ
¡¡¡¡Ö¸ÕëÊÇC/C++ÓïÑÔµÄÌØÉ«£¬¶øÊý×éÃûÓëÖ¸ÕëÓÐÌ«¶àµÄÏàËÆ£¬ÉõÖÁºÜ¶àʱºò£¬Êý×éÃû¿ÉÒÔ×÷ΪָÕëʹÓá£ÓÚÊǺõ£¬ºÜ¶à³ÌÐòÉè¼ÆÕ߾ͱ»¸ãºýÍ¿ÁË¡£¶øÐí¶àµÄ´óѧÀÏʦ£¬ËûÃÇÔÚCÓïÑԵĽÌѧ¹ý³ÌÖÐÒ²´íÎóµÃ¸øÑ§Éú½²½â£º"Êý×éÃû¾ÍÊÇÖ¸Õë"¡£ºÜÐÒÔË£¬ÎҵĴóѧÀÏʦ¾ÍÊÇÆäÖÐÖ®Ò»¡£Ê±ÖÁ½ñÈÕ£¬ÎÒÈÕ¸´Ò»ÈյؽøÐÐ×ÅC/C++ÏîÄ¿µÄ¿ª·¢£¬¶øÉí±ß» ......
½ñÌìÒª±à¸ö×î¼òµ¥µÄ"hello world"µÄC³ÌÐò£¬ËãÊdzõ²½¸ÐÊÜÏÂLinuxÖеıà³Ì»·¾³£¬Éæ¼°ÒÔÏÂ3¸ö²½Ö裺
1. ÏÈÔÚ"vim"Àï±àдԴÎļþ£»
2. È»ºóÔÙÓÃ"gcc"±àÒëÉú³É"hello"µÄ¿ÉÖ´ÐÐÎļþ£»
3. ÔËÐÐ"hello"£¬¿´¿´Ð§¹û¡£
ÄÇô¿ªÊ¼°É£¡
1. vim
vim hello.c
i
#include <stdio.h>
int
main (void)
{
printf ("hello.\n" ......
º¯ÊýÃûÓ뺯ÊýÖ¸Õë
º¯Êý´æ·ÅÔÚÄÚ´æµÄ´úÂëÇøÓòÄÚ£¬ËüÃÇͬÑùÓеØÖ·£¬ÎÒÃÇÈçºÎÄÜ»ñµÃº¯ÊýµÄµØÖ·ÄØ£¿
Èç¹ûÎÒÃÇÓÐÒ»¸öint test(int a)µÄº¯Êý£¬ÄÇô£¬ËüµÄµØÖ·¾ÍÊǺ¯ÊýµÄÃû×Ö£¬ÕâÒ»µãÈçͬÊý×éÒ»Ñù£¬Êý×éµÄÃû×Ö¾ÍÊÇÊý×éµÄÆðʼµØÖ·¡£
Ò» ͨ³£µÄº¯Êýµ÷ÓÃ
Ò»¸öͨ³£µÄº¯Êýµ÷ÓõÄÀý×Ó ......
Ôø¾Åöµ½¹ýÈÃÄãÃԻ󲻽⡢ÀàËÆÓÚint * (* (*fp1) (int) ) [10];ÕâÑùµÄ±äÁ¿ÉùÃ÷Â𣿱¾ÎĽ«ÓÉÒ×µ½ÄÑ£¬Ò»²½Ò»²½½Ì»áÄãÈçºÎÀí½âÕâÖÖ¸´ÔÓµÄC/C++ÉùÃ÷¡£
¡¡¡¡ÎÒÃǽ«´ÓÿÌì¶¼ÄÜÅöµ½µÄ½Ï¼òµ¥µÄÉùÃ÷ÈëÊÖ£¬È»ºóÖð²½¼ÓÈëconstÐÞÊηûºÍtypedef£¬»¹Óк¯ÊýÖ¸Õ룬×îºó½éÉÜÒ»¸öÄܹ»ÈÃÄã׼ȷµØÀí½âÈκÎC/C++ÉùÃ÷µÄ&ld ......