C++实用能力讲授
在准尺度C++中,有关缺省变量值的限制很是恍惚。基于此,许多编译器答允开拓人员将缺省变量值包括在函数声明,指向函数的指针和引用,成员函数的指针,以及typedef声明中。
请看一下以下的措施:
struct A
{
void func(int x=5)
{
}
};
void g(int n=12)
{
}
// 按照C++尺度,不能在以下声明中利用缺省变量值。
void (*pf)(inti=120);
void (A::*pmf)(int j=50);
typedef void (*PF)(inti=100);
// 函数的引用
typedef void (&PRF)(inti=100);
int main()
{
pf=g;
PF pf2=g;
pmf=&A::func;
A a;
//这些挪用利用了哪些缺省值?
pf();
pf2();
(a.*pmf)();
}
A::func()和g()具有缺省变量值,这是公道的。然而,指针pmf,pf以及typedefPF也界说了缺省的变量值。按照C++尺度,这是不类型的。
这一代码的实际利用中,个中的一个问题是这些声明中提供的缺省值与A::func()和g()函数提供的值纷歧致。也就是说,许多编译器将这些代码作为非尺度的扩展。当挪用g()函数时,我的编译将120作为pf的缺省值;然而,对付pf2,它利用100作为它的缺省值。
作为一种法则,应该制止利用指向函数的指针,成员函数的指针,以及typedef定名的缺省变量值。纵然你的编译器接管了它们,在更高版本中它也大概不被接管。并且,这些代码也会低落措施的乖巧性,也会给那些无法鉴别哪些编译器吸收何种缺省变量的开拓人员带来误导。在利用这些缺省变量值的正当代码中,这里的发起是添加一些须要的注释,以说明需要哪些缺省变量值。