如何将sizeof()è¿ç®—符应用于éžé™æ€ç±»æˆå‘˜æ–¹æ³•ï¼Ÿ

时间:2011-07-25 06:51:17

标签: c++ sizeof member-functions

struct MyClass {
  int foo () { return 0; }
};

unsigned int size = sizeof(MyClass::foo);  // obviously error

我们å¯ä»¥å°†sizeof()应用于外部 classçš„æˆå‘˜æ–¹æ³•å—?我们需è¦å£°æ˜Žå¯¹è±¡æ¥èŽ·å–它å—?

编辑:我知é“上é¢çš„代ç ä¼šç»™å‡ºé”™è¯¯ï¼ˆè¿™å°±æ˜¯â€œæ˜Žæ˜¾â€è¿™ä¸ªè¯çš„原因)。想知é“我们是å¦å¯ä»¥å°†sizeof()应用于æˆå‘˜æ–¹æ³•ã€‚我ä¸æƒ³è¯¦ç»†æ述用例。

4 个答案:

答案 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 ++语言没有这样的概念。或任何类型功能的大å°ã€‚