struct X : Empty {
int a;
// ...
};
void f(X* p)
{
void* p1 = p;
void* p2 = &p->a;
if (p1 == p2) cout << "nice: good optimizer";
}
這種優化是允許的,可以被廣泛使用。它允許程序員使用空類以表現一些簡單的概念,F在有些編譯器提供這種“空基類優化”(empty base class optimization)。
我必須在類聲明處賦予數據嗎?
不必須。如果一個接口不需要數據時,無須在作為接口定義的類中賦予數據。代之以在派生類中給出它們。參見“為什么編譯要花這么長的時間?”。
有時候,你必須在一個類中賦予數據?紤]一下復數類的情況:
template<class Scalar> class complex {
public:
complex() : re(0), im(0) { }
complex(Scalar r) : re(r), im(0) { }
complex(Scalar r, Scalar i) : re(r), im(i) { }
// ...
complex& operator+=(const complex& a)
{ re+=a.re; im+=a.im; return *this; }
// ...
private:
Scalar re, im;
};
文章來源于領測軟件測試網 http://www.kjueaiud.com/