回答
在C++中,静态成员函数就像普通的全局函数一样,除了关于名称的可见性外:
- 函数的名称使用类名进行限定。
- 与朋友函数一样,静态成员函数可以访问私有和受保护的类成员。然而,与朋友函数一样,它没有
this
指针,因此它只能访问您授予它访问权的对象的那些部分(例如,作为参数传递)。 - (谢谢Alf):你不能声明任何成员函数(静态或其他)
extern "C"
。
我想补充说你不能声明它是'external“C”'。这对C回调来说是一个痛苦,尽管它很容易解决(或者只是在编译器允许的情况下忽略形式)。 – 2011-03-03 19:14:18
@Alf P. Steinbach:完成。谢谢 - 我忘记了。 – 2011-03-03 19:17:09
使一个静态函数可以在不实例化它所属类的实例的情况下调用它。 learncpp.com有更多一些关于这个问题,并检查了下面的例子,这将无法被编译:
class Foo
{
public:
static void Bar1();
void Bar2();
};
int main(int argc, char* argv[])
{
Foo::Bar1();
Foo x;
x.Bar2();
Foo::Bar2(); // <-- error C2352: 'Foo::Bar2' : illegal call of non-static member function
return 0;
}
-1请修正'void main'。在说明错误的例子中引入不相关的错误是不恰当的。有助于downvote,被引用的“你必须在静态方法内声明该类的一个实例”就是很粗鲁,尽管它可以被知道该语言的人解码。 – 2011-03-03 19:11:26
公平点;完成。 – 2011-03-04 00:46:53
静态函数可以被调用,而不实际创建该类型的变量,例如:
class Foo
{
public:
static void Bar();
void SNAFU();
};
int main(void)
{
Foo::Bar(); /* Not necessary to create an instance of Foo in order to use Bar. */
Foo x;
x.SNAFU(); /* Necessary to create an instance of Foo in order to use SNAFU. */
}
-1:类声明末尾需要分号 – 2011-03-03 18:55:58
-1:'main'函数返回'int'。总是。 – 2011-03-03 20:47:19
@Thomas和Jon,我修复了你提到的错误。 – 2011-03-04 15:34:45
静态成员函数(在类中)意味着您可以调用该函数而不必先创建类的实例。这也意味着该函数不能访问任何非静态数据成员(因为没有实例来获取数据)。 例如
class TestClass
{
public:
TestClass() {memberX_ = 10;}
~TestClass();
// This function can use staticX_ but not memberX_
static void staticFunction();
// This function can use both staticX_ and memberX_
void memberFunction();
private:
int memberX_;
static int staticX_;
};
- 1. 静态函数访问的速度
- 2. 关于javascript(body-tag)的快速提问
- 3. 关于plist的快速提问
- 4. 基本python。有关调用函数的快速问题
- 5. 静态函数更快?
- 6. 关于C#和静态类和函数的问题
- 7. 快速静态文件没有更新
- 8. 快速gzip静态内容
- 9. 有关XPath/DOM快速的问题
- 10. 有关DOM Reflow的快速问题
- 11. 有关铸造基本退货类型的快速提问
- 12. C中的函数内的静态和C++中的类内的静态差异?
- 13. 有关C#CMS的命名约定的快速问题
- 14. C中的静态构造函数
- 15. 静态库中的过度C函数
- 16. 像C函数中的静态变量
- 17. 快速服务器无法从Index.html中提供静态文件
- 18. 静态线程函数访问非静态类成员在C++
- 19. C++更快?静态成员函数还是普通的?
- 20. 在C++中使用静态和静态函数的错误
- 21. 静态函数和多线程中的C++静态成员
- 22. 在PHP中快速查询相关内容的快速问题!
- 23. 快速Objective-C的问题
- 24. 有关PHP中使用静态函数和名称空间的类的问题
- 25. C/C++中的pow()函数的快速实现/近似
- 26. 关于AS3中内存管理的快速提问
- 27. javascript中的私有静态函数
- 28. C++静态函数复制
- 29. 在c + +静态虚函数
- 30. C#从静态函数
非静态函数也只有一个实例 – Abyx 2011-03-03 17:59:25