为了账号安全,请及时绑定邮箱和手机立即绑定

C++中, 函数的返回值可以是static形式的吗?

C++中, 函数的返回值可以是static形式的吗?

交互式爱情 2019-01-30 11:02:44
C++中, 函数的返回值可以是static形式的吗
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

函数名前加static是内部函数,作用域局限在定义函数的文件内(在其他文件就不能调用此函数了)。函数名前加extern 是外部函数,作用域扩展到定义函数的文件外(在其他文件也可以调用此函数)。


  1. static 表明修饰的函数的作用域是本文件.2.通常我们将只会在本文件中使用的函数定义为static,这样可以避免可能的命名冲突.同时将带来一个好处,那就是"错误局部化",便于查错.3.正因为我们只在这一个文件内使用,所以我们通常在CPP文件的头部声明,而不会把它放在在H文件中.4.我们通常不会#include CPP文件,(有时在碰到模板时例外),而是#include H 文件.举例来说在SDK情况下,我有一个父窗口,下面管理着20个子窗口,在子窗口的WNDPROC中都一个函数叫OnInitDiaog()处理相应的WM_INITDIALOG消息.每个子窗口的WNDPROC都在一个单独的CPP文件中.如果我声明其为static,则所有的函数都可以叫做OnInitDialog(),否则就得改成Dialog1_OnInitDialog(), Dialog2_OnInitDialgo().... Dialog20_OnInitDialog(),你说烦不烦?


假设你写了一个LIB(假设是STATIC LIB),你希望你的用户用f1(),f2()两个函数,因此你给了他们一个头文件,里面只有这两个函数的声明,你想我把其他的细节都黑箱化的,用户看不到,应该不会有问题了,但在你的LIB中有一个g(),它只能被f1()或f2()调用.但用户不知道,因为他拿到头文件中没有,而LIB是个二进制文件.更何况你也不希望他知道你的g()函数,因为那完全是私有的.用户使用你的LIB,在他的程序中他写了一个函数g(),他和你一样不用static,他编译无误,链接时出错了,因为有两个g(),用户十分纳闷,他只看见了自己的g().采用static就可避免上述情况.


查看完整回答
反对 回复 2019-03-14
  • 2 回答
  • 0 关注
  • 791 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信