从C++语言的视角来看,有一些关键字的使用确实可以选择的。
最常见的是在重写基类虚成员函数的派生类成员函数中可选地使用virtual关键字:
Class Shape {
Public :
Virtual void draw() const =0;
Virtual void rotate ( double degree )=0;
Virtual void invert () =0;
//…
};
class Blob: public Shape {
public :
virtual void draw () const;
virtual rotate (double );
void invert () =0;
//…
};
成员函数Blob::draw()重写了基类虚函数draw,因此它也是虚拟的,其中对关键字virtual的使用完全是可选的,使用与否对程序的含义没有任何影响。一个常见的误解是,遗漏使用virtual关键字将回阻止在下级派生类中进一步重些该函数,事实并非如此:
注意,当重写Blob::invert这样的纯虚函数时,virtual关键字同样是可选的,总之,在一个重写的派生类函数中,virtual关键字出现与否完全是可选的,对于程序的含义没有丝毫影响。
当声明operatir new ,operator delete, array new以及array delete成员时,static关键字是可选的。因为这些函数是隐式静态的:
class Handle {
public :
void * operator new ( size_t); //隐式静态
static void operator delete (void *);
static void * operator new [] (size_t);
void operator delete [] (void *); //隐式静态
}
在一个模板的头部,关键字typename和class可以互换使用,表示一个摸板参数是一个类型名字,在这种上下文环境中,二者含义无任何区别。然而,许多人使用typename 指明该模板实参可以是任何类型,而使用class关键字来指明该类型实参必须是一个类类型:
C++中,使用register和auto与否对程序的含义也没有任何影响.