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

什么是“静态”功能?

什么是“静态”功能?

C
jeck猫 2019-07-27 15:02:37
什么是“静态”功能?问题是关于普通c函数,而不是c ++ static方法,正如评论中所阐明的那样。好的,我理解static变量是什么,但什么是static函数?为什么如果我声明一个函数,让我们说void print_matrix,让我们说a.c(WITHOUT a.h)和include "a.c"- 我得到"print_matrix@@....) already defined in a.obj",但是如果我声明它static void print_matrix然后它编译?更新只是为了清理 - 我知道包括.c很糟糕,正如你们许多人指出的那样。我只是做它在暂时清除空间main.c,直到我有更好的想法如何将所有这些功能集成到适当.h和.c文件。只是一个临时的快速解决方案。
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

static函数是仅对同一文件中的其他函数可见的函数(更准确地说是相同的转换单元)。

编辑:对于那些认为,问题的作者意味着“类方法”的人:由于问题被标记,C他意味着一个普通的旧C函数。对于(C ++ / Java / ...)类方法,static意味着可以在类本身上调用此方法,不需要该类的实例。


查看完整回答
反对 回复 2019-07-27
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

C中的静态函数和C ++中的静态成员函数之间存在很大差异。在C中,静态函数在其转换单元之外是不可见的,它是编译成的目标文件。换句话说,使函数静态限制其范围。您可以将静态函数视为其* .c文件的“私有”(尽管这不是严格正确的)。

在C ++中,“static”也可以应用于类的成员函数和数据成员。静态数据成员也称为“类变量”,而非静态数据成员是“实例变量”。这是Smalltalk术语。这意味着类的所有对象只共享一个静态数据成员的副本,而每个对象都有自己的非静态数据成员副本。因此,静态数据成员本质上是一个全局变量,它是一个类的成员。

非静态成员函数可以访问类的所有数据成员:静态和非静态。静态成员函数只能对静态数据成员进行操作。

考虑这一点的一种方法是在C ++中静态数据成员和静态成员函数不属于任何对象,而是属于整个类。


查看完整回答
反对 回复 2019-07-27
?
ibeautiful

TA贡献1993条经验 获得超5个赞

关于C ++中的函数,关键字static有两种用途。

第一种是将函数标记为具有内部链接,因此不能在其他翻译单元中引用它。在C ++中不推荐使用此用法。对于此用法,首选未命名的命名空间。

// inside some .cpp file:static void foo();    // old "C" way of having internal linkage// C++ way:namespace{
   void this_function_has_internal_linkage()
   {
      // ...
   }}

第二种用法是在类的上下文中。如果一个类具有静态成员函数,则意味着该函数是该类的成员(并且具有对其他成员的通常访问权限),但不需要通过特定对象调用它。换句话说,在该函数内部,没有“this”指针。


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 425 浏览

添加回答

举报

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