看流星社区

 找回密码
 注册账号
查看: 1964|回复: 0

小技巧:C++实用技巧两则

[复制链接]

该用户从未签到

发表于 2013-3-22 08:41:52 | 显示全部楼层 |阅读模式
在准标准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以及typedef PF也定义了缺省的变量值。根据C++标准,这是不规范的。

    这一代码的实际使用中,其中的一个问题是这些声明中提供的缺省值与A::func()和g()函数提供的值不一致。也就是说,很多编译器将这些代码作为非标准的扩展。当调用g()函数时,我的编译将120作为pf的缺省值;然而,对于pf2,它使用100作为它的缺省值。

    作为一种规则,应该避免使用指向函数的指针,成员函数的指针,以及typedef命名的缺省变量值。即使你的编译器接受了它们,在更高版本中它也可能不被接受。而且,这些代码也会降低程序的灵巧性,也会给那些无法判别哪些编译器接收何种缺省变量的开发人员带来误导。在使用这些缺省变量值的合法代码中,我的建议是添加一些必要的注释,以说明需要哪些缺省变量值。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-5 17:22

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表