【发布时间】:2010-02-25 01:46:08
【问题描述】:
为什么需要静态关键字?
为什么编译器不能推断它是否是“静态的”?
如下:
我可以在不访问非静态成员数据的情况下编译这个函数吗?是-> 静态功能。 否 -> 非静态函数。
有什么理由不能推断出来吗?
【问题讨论】:
为什么需要静态关键字?
为什么编译器不能推断它是否是“静态的”?
如下:
我可以在不访问非静态成员数据的情况下编译这个函数吗?是-> 静态功能。 否 -> 非静态函数。
有什么理由不能推断出来吗?
【问题讨论】:
如果您希望编译器当场决定它是否是静态的,这将如何影响链接到仅定义方法签名的头文件的外部源文件?
【讨论】:
静态或非静态属性会影响函数类型。例如,非静态成员函数有一个隐含的this 参数,而静态成员函数则没有。
换句话说,静态成员函数和非静态成员函数之间有很大的质的区别。编译器无法“推断”这一点。这是作者的意图问题。
如果我希望(并且需要)我的函数是非静态的,我将其设为非静态,即使它不访问类的任何非静态成员。如果编译器突然决定将我的非静态函数设为静态只是因为它不访问类的任何非静态成员,通常情况下它会破坏代码的功能。
【讨论】:
是的,编译器可以,但它不知道您的意图。最初的设计师可能认为提供您的意图很重要。
【讨论】:
在语言中这样的冗余有助于确保许多程序员错误最终会被编译器捕获。
【讨论】:
另一个原因:如果函数是静态的,它就不能在派生类中被覆盖。没有多态性。
【讨论】:
static。我是说虚拟方法可能会也可能不会访问成员变量,但您不希望编译器自动将它们声明为静态。