虽然“标准”是喜欢,是否有任何情况下,其中sizeof(*this)
是更容易出错的或以某种方式不期望的?的sizeof(*此)在首标唯一的构造实施
我第一眼看不到任何东西,但如果是的话,为什么用简短的解释会有帮助。
虽然“标准”是喜欢,是否有任何情况下,其中sizeof(*this)
是更容易出错的或以某种方式不期望的?的sizeof(*此)在首标唯一的构造实施
我第一眼看不到任何东西,但如果是的话,为什么用简短的解释会有帮助。
我能想到的避免sizeof(*this)
的唯一原因是它可能被误解为实际对象(例如派生类)的大小。
我更喜欢sizeof(variable)
而不是sizeof(type)
,如果可能的话,因为它不太容易出错,以防您的变量更改类型。
我的观点是sizeof(type)比sizeof(variable)更可取,以排除歧义。以下示例显示了通过基类指针引用的派生类的实例。 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() ;
}
但是,知道真实类型的大小可能会更有用吗? - P.S'reinterpret_cast'看起来很可疑,如果它做得对 - 将派生的'* pb'的类型保留下来? - 完全不需要上传。 – UncleBens 2009-11-10 22:59:54
当需要真实类型的大小时,您必须使用sizeof(变量)。重点在于最好使用sizeof(type)来获取特定类的大小以避免这种影响。 (你是对的,演员是多余的,我编辑了出来) – 2009-11-11 15:52:41
为标签欢呼和编辑。 – 2009-11-10 22:21:43
标题是一个名词短语;它不会问一个问题,它当然不会“说出来”。标题与什么有关?你真的在问什么? – 2009-11-11 01:27:21
好的,让我们挑选。问题是一个问题,问题。标题是一个特定的上下文。 'header'是一个黑暗的.h坑,有人,任何人都会看一些代码,并且遇到这个构造并想知道它的用法。虽然具体的情况,可以忽略它,并看到其他一些观点。第三,事实上英语不是地球上唯一的语言应该允许一些宽大。而我真正要问的是从''开始,并超越斜体部分到该段的结尾。我会编辑标题,但如果它可以变得更好,请让我再次知道。 – 2009-11-11 09:59:05