3 回答
TA贡献1794条经验 获得超7个赞
static
函数是仅对同一文件中的其他函数可见的函数(更准确地说是相同的转换单元)。
编辑:对于那些认为,问题的作者意味着“类方法”的人:由于问题被标记,C
他意味着一个普通的旧C函数。对于(C ++ / Java / ...)类方法,static
意味着可以在类本身上调用此方法,不需要该类的实例。
TA贡献1796条经验 获得超10个赞
C中的静态函数和C ++中的静态成员函数之间存在很大差异。在C中,静态函数在其转换单元之外是不可见的,它是编译成的目标文件。换句话说,使函数静态限制其范围。您可以将静态函数视为其* .c文件的“私有”(尽管这不是严格正确的)。
在C ++中,“static”也可以应用于类的成员函数和数据成员。静态数据成员也称为“类变量”,而非静态数据成员是“实例变量”。这是Smalltalk术语。这意味着类的所有对象只共享一个静态数据成员的副本,而每个对象都有自己的非静态数据成员副本。因此,静态数据成员本质上是一个全局变量,它是一个类的成员。
非静态成员函数可以访问类的所有数据成员:静态和非静态。静态成员函数只能对静态数据成员进行操作。
考虑这一点的一种方法是在C ++中静态数据成员和静态成员函数不属于任何对象,而是属于整个类。
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”指针。
- 3 回答
- 0 关注
- 425 浏览
添加回答
举报