C++实用技巧两则

原创 2004年07月19日 11:51:00
准标准C++中,有关缺省变量值的限制非常模糊。基于此,很多编译器允许开发人员将缺省变量值包含在函数声明,指向函数的指针和引用,成员函数的指针,以及typedef声明中。
 cn_336_280.swf cn_336_280.swf code;sz=1x1;ord=1535383087?

请看一下以下的程序:

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++实用技巧

复杂的东西写多了,如今写点简单的好了。由于功能上的需要,Vczh Library++3.0被我搞得很离谱。为了开发维护的遍历、减少粗心犯下的错误以及增强单元测试、回归测试和测试工具,因此记录下一些...
  • QQ276592716
  • QQ276592716
  • 2015-01-14 22:17:40
  • 635

ADO.NET实用技巧两则

要想充分发挥ADO.NET的优势,不仅需要全面、深入理解ADO.NET编程模型,及时总结经验、技巧也十分重要。ADO已经有多年的实践经验,ADO.NET以此为基础,提供了更加丰富、强大的工具;尽管如此...
  • ebookbug
  • ebookbug
  • 2004-06-29 21:35:00
  • 1021

ADO.NET实用技巧两则

要想充分发挥ADO.NET的优势,不仅需要全面、深入理解ADO.NET编程模型,及时总结经验、技巧也十分重要。ADO已经有多年的实践经验,ADO.NET以此为基础,提供了更加丰富、强大的工具;尽管如此...
  • daybreak1978
  • daybreak1978
  • 2006-09-07 02:35:00
  • 482

ADO.Net实用技巧两则

要想充分发挥ADO.NET的优势,不仅需要全面、深入理解ADO.NET编程模型,及时总结经验、技巧也十分重要。ADO已经有多年的实践经验,ADO.NET以此为基础,提供了更加丰富、强大的工具;尽管如此...
  • Anchor2011_begin
  • Anchor2011_begin
  • 2011-12-28 15:44:44
  • 476

故事两则

网上游走间,偶尔看到,觉得很有意思,于是记诸此(两者并无关联) 【一】 一位学者对卡夫卡说,人的心脏里有两个房间,一间住着快乐,一间住着痛苦,若是你笑得太大声,就会吵到另一个房间里的痛苦。卡夫卡问学者...
  • thesecondwoodstock
  • thesecondwoodstock
  • 2004-07-07 23:17:00
  • 1247

Vim实用技巧.pdf

  • 2015年11月18日 16:18
  • 9.53MB
  • 下载

PHP实现图片压缩的两则实例

函数:调整图片尺寸或生成缩略图 返回:True/False 参数:   $Image  需要调整的图片(含路径)   $Dw=450  调整时最大宽度;缩略图时的绝对宽度   $Dh=450...
  • njhkhhhj
  • njhkhhhj
  • 2014-07-20 15:01:57
  • 311

Vim/Vi实用技巧(第二版)

Vim/Vi实用技巧1、导入文件 :r [文件名] #导入到当前编辑的文件中如 :r /etc/inittab  文件上部为/etc/services文件,下部为/etc/inittab文件 2、执...
  • hanqing280441589
  • hanqing280441589
  • 2014-09-25 17:00:41
  • 4827

-= Excel VBA实用技巧大全(848个实用技巧)=-

  • 2010年07月29日 17:35
  • 8.34MB
  • 下载

snmp渗透辅助脚本两则

关于snmp snmp中文全称为简单网关协议(Simple Network Management Protocol),很多网络设备比如交换机、路由器、防火墙上都开启了此协议,默认端口为161。其中存...
  • god_7z1
  • god_7z1
  • 2015-03-31 20:16:31
  • 492
收藏助手
不良信息举报
您举报文章:C++实用技巧两则
举报原因:
原因补充:

(最多只允许输入30个字)