根据C++中'static'关键字的这个链接:
static关键字仅与类定义中的静态成员的声明一起使用,但不与该静态成员的定义一起使用.
为什么成员函数定义中禁止使用static关键字?我确实理解在其定义中将函数重新声明为"静态"是多余的.但是在编译函数定义时使用它应该是无害的,因为它不会导致任何歧义.那么为什么编译器会禁止它呢?
Sto*_*ica 17
有歧义好吧.相同的定义根本不需要成员函数.
考虑一下:
namespace foo {
static void bar();
}
static void foo::bar() {
}
Run Code Online (Sandbox Code Playgroud)
foo::bar被需要,以具有相同的链接说明符来定义.
但是,对于成员函数,static它不是链接说明符.如果允许的话,定义的正确性foo::bar将非常依赖于什么foo.static实际上,禁止减轻了编译器的负担.
将其扩展到一般成员,而不仅仅是成员函数,是一致的问题.
关键是,它static有几个非常不同的含义:
class Foo {
static void bar();
}
Run Code Online (Sandbox Code Playgroud)
这里static关键字意味着该函数bar与该类相关联Foo,但不是在该类的实例上调用Foo。的这个含义static与面向对象密切相关。然而,声明
static void bar();
Run Code Online (Sandbox Code Playgroud)
含义非常不同:这意味着bar仅在文件范围内可见,该函数不能直接从其他编译单元调用。
你看,如果你static在类声明中说,以后将函数限制在文件范围内是没有任何意义的。如果您有一个static函数(具有文件范围),则将其作为公共头文件中类定义的一部分发布是没有意义的。这两个含义是如此不同,以至于它们实际上相互排斥。
static具有更多、独特的含义:
void bar() {
static int hiddenGlobal = 42;
}
Run Code Online (Sandbox Code Playgroud)
是另一个意思,类似于,但不完全相同
class Foo {
static int classGlobal = 6*7;
}
Run Code Online (Sandbox Code Playgroud)
编程时,单词在所有上下文中并不总是具有相同的含义。
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |