科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件C++实用技巧两则

C++实用技巧两则

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在准标准C++中,有关缺省变量值的限制非常模糊。因此很多编译器允许开发人员将缺省变量值包含在函数声明,指向函数的指针和引用,成员函数的指针,以及typedef声明中。

作者:51cto.com整理 来源:51cto.com整理 2007年9月15日

关键字: C++ 技巧 软件

  • 评论
  • 分享微博
  • 分享邮件

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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章