- 有效清除垃圾邮件 邮件高级应用技巧两则
- Visual C++实现图形特技
- VC++实现COM事件接收器
- 使用Visual C++实现OLE剪贴板(1)
- 使用Visual C++实现OLE剪贴板(2)
- 利用Visual C++实现AVI文件的图像截取
- [图文] 用VC实现小型矢量图形系统的开发
- 用VC实现小型矢量图形系统的开发 2
- Visual C#编程技巧两则
- [组图] DreamweaverMX2004技巧两则
- Outlook2003日历显示小技巧两则
- 金山文字应用技巧两则
- [图文] Excel:人民币小写金额转换大写技巧两则
- 横看成岭侧成峰:局域网“隐身”小技巧两则
- 公司局域网深藏不露之技巧两则
- 用VC++实现文件加密功能的源代码
- “八皇后”动态图形的VC实现
- VC++实现文件夹时间属性的获取与更改
- VB.NET窗体操作技巧两则
请看一下以下的程序:
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以及typedef PF也定义了缺省的变量值。根据C++标准,这是不规范的。
这一代码的实际使用中,其中的一个问题是这些声明中提供的缺省值与A::func()和g()函数提供的值不一致。也就是说,很多编译器将这些代码作为非标准的扩展。当调用g()函数时,我的编译将120作为pf的缺省值;然而,对于pf2,它使用100作为它的缺省值。
作为一种规则,应该避免使用指向函数的指针,成员函数的指针,以及typedef命名的缺省变量值。即使你的编译器接受了它们,在更高版本中它也可能不被接受。而且,这些代码也会降低程序的灵巧性,也会给那些无法判别哪些编译器接收何种缺省变量的开发人员带来误导。在使用这些缺省变量值的合法代码中,我的建议是添加一些必要的注释,以说明需要哪些缺省变量值。
[编辑:百家电脑学院] [返回学院首页] [返回上一页] []
·上一篇:C/C++编程新手错误分析 · 下一篇:Effective C++ 的52个条款列表

