我不明白在初始化时需要指定extern/static变量的类型.例如:
struct Test{
static int i;
};
Test::i = 2; //error
int Test::i = 2; //ok
Run Code Online (Sandbox Code Playgroud)
编译器不知道我是int类型吗?它只是编译器的特殊性,或者为什么类型的规范,int"需要?
我不明白需要在初始化时指定外部/静态变量的类型。
因为语言设计者选择对变量声明和定义使用相同的语法。该语法包括类型名称。您是对的,在某些情况下,该类型名称是多余的。但是允许您省略它可能会有些混乱:它看起来像是一个赋值,而不是一个定义。
编译器不知道i是int类型吗?
仅当变量已被声明时。对于像这样的静态成员来说必须是这种情况,但对于全局变量则不一定。您可以在一个源文件中声明它:
extern int i;
Run Code Online (Sandbox Code Playgroud)
并在另一个中定义它
int i = 42;
Run Code Online (Sandbox Code Playgroud)
而不使声明可用于定义。