struct MyClass {
int foo () { return 0; }
};
unsigned int size = sizeof(MyClass::foo); // obviously error
我们å¯ä»¥å°†sizeof()
应用于外部 class
çš„æˆå‘˜æ–¹æ³•å—?我们需è¦å£°æ˜Žå¯¹è±¡æ¥èŽ·å–它å—?
编辑:我知é“上é¢çš„代ç 会给出错误(这就是“明显â€è¿™ä¸ªè¯çš„åŽŸå› ï¼‰ã€‚æƒ³çŸ¥é“我们是å¦å¯ä»¥å°†sizeof()应用于æˆå‘˜æ–¹æ³•ã€‚我ä¸æƒ³è¯¦ç»†æ述用例。
ç”案 0 :(得分:6)
æ‚¨æ— æ³•èŽ·å–æˆå‘˜å‡½æ•°çš„大å°ï¼Œä½†æ‚¨å¯ä»¥èŽ·å¾—指å‘æˆå‘˜å‡½æ•°çš„指针的大å°ï¼š
int size = sizeof( &MyClass::foo );
对于éžæˆå‘˜å‡½æ•°ï¼ˆå’Œé™æ€æˆå‘˜å‡½æ•°ï¼‰ä¹Ÿæ˜¯å¦‚æ¤ï¼Œæ— 法获得函数的大å°ã€‚è¿™å¯èƒ½ä¼šäº§ç”Ÿè¯¯å¯¼ï¼Œå› 为在大多数情况下,函数的å称会自动衰å‡åˆ°æŒ‡å‘函数的指针,基本上与数组衰å‡åˆ°æŒ‡é’ˆçš„指针相åŒã€‚ç¬¬ä¸€ä¸ªå…ƒç´ ï¼Œä½†åœ¨æ•°ç»„çš„æƒ…å†µä¸‹ï¼Œsizeof
ä¸ä¼šè§¦å‘è¡°å‡ï¼Œè¿™å过æ¥æ„味ç€ä½ 必须明确地询问指针。
ç”案 1 :(得分:1)
iirc这会返回函数指针的大å°ï¼Œæ‰€ä»¥ä¸ºä»€ä¹ˆå‘¢ï¼Ÿæˆ–者我错了?
ç¼–è¾‘ï¼šæˆ‘é”™äº†ï¼Œè¿™æ˜¯æ— æ•ˆçš„ä»£ç ,如果函数ä¸åœ¨è¯¾å ‚上的事件。使用sizeofå’Œfunction所能åšçš„就是获å–函数指针的大å°ï¼ˆä½ 需è¦å…ˆåšå®ƒï¼‰ã€‚å¦‚æžœä½ æƒ³èŽ·å¾—åŠŸèƒ½ä»£ç å 用的大å°ï¼Œä½ 需è¦ä¸€äº›å…¶ä»–方法æ¥å®žçŽ°å®ƒã€‚
进一æ¥é˜…读:http://msdn.microsoft.com/en-us/library/4s7x1k91(v=vs.71).aspx
ç”案 2 :(得分:1)
使用
sizeof(int (MyClass::*)())
å› ä¸ºæ‚¨æ£åœ¨ä½¿ç”¨MyClass
çš„æˆå‘˜å‡½æ•°æŒ‡é’ˆçš„大å°è¿”回int
并且ä¸æŽ¥å—任何å‚数“。
ç”案 3 :(得分:1)
 Â想知é“我们是å¦å¯ä»¥æ‰¾åˆ°sizeof()æˆå‘˜æ–¹æ³•ã€‚
ä¸ï¼Œå› 为C ++è¯è¨€æ²¡æœ‰è¿™æ ·çš„概念。或任何类型功能的大å°ã€‚