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

PCB板基础知识、布局原则、布线技巧、设计规则

PCB板基础知识 一、PCB板的元素 1、  工作层面 对于印制电路板来说,工作层面可以分为6大类, 信号层 (signal layer) 内部电源/接地层 (internal pla...
  • walk_ing
  • walk_ing
  • 2016年09月08日 13:53
  • 2567

总结自己使用shell命令行常用到的8个小技巧

当然,我们也可以配合grep,只查看包含指定字符的log信息 [root@localhost ~]#tail -f file | grep --line-buffered your_pattern...
  • Hello_Hwc
  • Hello_Hwc
  • 2014年10月19日 14:24
  • 4999

15个必须知道的chrome开发者技巧

一、快速切换文件   如果你使用过sublime text,那么你可能不习惯没有Go to anything这个功能的覆盖。你会很高兴听到chrome开发者功能也有这个功能,当DevTools被打开...
  • Vail_qy
  • Vail_qy
  • 2016年09月02日 09:52
  • 1211

ADO.Net实用技巧两则

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

C++/GDI+ 学习笔记(四)——实用技巧——调色板(ColorPalette)

在使用的过程中,遇到了这样的一个情况。维护很久前的一个项目的时候,想把之前的程序作成DLL。里面有一部分是描画一张8位DIB图片的,用的是纯C写的一段代码。可是在使用的时候发现,GDI+中由于使用了A...
  • Mirage520
  • Mirage520
  • 2012年05月10日 11:49
  • 1304

DEV C++ 实用技巧

1、DEV C++ 不能调试 (1)tools->compiler option->settings->linker里设置为yes后,Generate debugging information...
  • liming0931
  • liming0931
  • 2012年01月02日 22:13
  • 1008

C++编程实用技巧——专家讲述C++程序设计的窍门

从C转向C++ 对每个人来说,习惯C++需要一些时间,对于已经熟悉C的程序员来说,这个过程尤其令人苦恼。因为C是C++的子集,所有的C的技术都可以继续使用,但很多用起来又不太合适。例如,C++程...
  • pizi0475
  • pizi0475
  • 2012年08月06日 07:13
  • 838

Visual C++6.0初学者实用技巧(MFC)

1:我怎样才能建立一个等待光标? 调用BeginWaitCursor函数来启动等待光标,调用EndWaitCursor函数 来结束等待光标。要注意,二者都要调用App的成员函数,如下所示: ...
  • rovsky
  • rovsky
  • 2011年05月08日 10:14
  • 369

C++实用技巧(四)

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

C++实用技巧(三)

复杂的东西写多了,如今写点简单的好了。由于功能上的需要,Vczh Library++3.0被我搞得很离谱。为了开发维护的遍历、减少粗心犯下的错误以及增强单元测试、回归测试和测试工具,因此记录下一些开发...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年12月23日 12:35
  • 233
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++实用技巧两则
举报原因:
原因补充:

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