虽然“标准”更倾向于使用sizeof(typename)
,但是sizeof(*this)
更容易出错或者某种方式不合适?
乍看之下我看不到任何东西,但如果是的话,为什么简短的解释会有所帮助。
答案 0 :(得分:10)
我能想到避免sizeof(*this)
的唯一原因是它可能被误解为实际对象的大小(例如派生类)。
答案 1 :(得分:8)
我希望尽可能sizeof(variable)
超过sizeof(type)
,因为如果您的变量更改类型,它更不容易出错。
答案 2 :(得分:3)
我的观点是sizeof(type)优于sizeof(变量)以排除歧义。以下示例显示通过基类指针引用的派生类的实例。 size方法返回sizeof(Derived),因此sz1 == sz3 == sz4。如果调用者没有对实现的深入了解,那么调用者可以合理地期望sizeof(Base)。
class Base
{
public:
virtual size_t size( void )
{
return sizeof( *this ) ;
}
private:
int a ;
double b ;
} ;
class Derived : public Base
{
public:
virtual size_t size( void )
{
return sizeof( *this ) ;
}
private:
long c ;
} ;
int main( int argc , char * argv[] )
{
Base b ;
Derived d ;
size_t sz0 = sizeof( Base ) ;
size_t sz1 = sizeof( Derived ) ;
size_t sz2 = b.size() ;
size_t sz3 = d.size() ;
Base * pb = &d ;
size_t sz4 = pb->size() ;
}