初学者编程入门:C++实用技巧讲解

王朝c/c++·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

在准标准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命名的缺省变量值。即使你的编译器接受了它们,在更高版本中它也可能不被接受。而且,这些代码也会降低程序的灵巧性,也会给那些无法判别哪些编译器接收何种缺省变量的开发人员带来误导。在使用这些缺省变量值的合法代码中,这里的建议是添加一些必要的注释,以说明需要哪些缺省变量值。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航