为什么静态关键字必不可少?
为什么编译器无法推断它是否是“静态的”?
如下:
我是否可以在不访问非静态成员数据的情况下编译此函数?是的 - >静态功能。 不 - >非静态函数。
有没有理由不推断?
答案 0 :(得分:7)
如果您希望编译器现场决定它是否是静态的,那么它如何影响链接到刚定义方法签名的头文件的外部源文件?
答案 1 :(得分:4)
静态或非静态的影响会影响函数类型。非静态成员函数具有隐式this
参数,而静态成员函数则没有,例如。
换句话说,静态和非静态成员函数之间存在重大的质量差异。编译器不能“推断”这个。这是作者的意图问题。
如果我希望(并且需要)我的函数是非静态的,我将它设置为非静态的,即使它不访问该类的任何非静态成员。如果编译器突然决定让我的非静态函数静态,因为它不访问类的任何非静态成员,一般情况下它会破坏代码的功能。
答案 2 :(得分:1)
是的,编译器可以,但它不知道你的意图。最初的设计师可能认为提供你的意图非常重要。
答案 3 :(得分:0)
在语言中具有这样的冗余有助于确保许多程序员错误最终会被编译器捕获。
答案 4 :(得分:0)
另一个原因:如果函数是静态的,则无法在派生类中重写它。没有多态性。