Stanislav Petrov Asked:2020-05-29 23:26:15 +0000 UTC2020-05-29 23:26:15 +0000 UTC 2020-05-29 23:26:15 +0000 UTC 静态类是什么意思? 772 这个设计是什么意思? static class Class {}; 如果构造没有意义,那么工作室为什么要编译它。 c++ 2 个回答 Voted AnT stands with Russia 2020-05-29T23:48:58Z2020-05-29T23:48:58Z 这样的结构没有任何意义——原则上它是不编译的。几个世纪以来,C++static只允许在对象或函数声明中使用存储类说明符(在这种情况下)。 10.1.1 存储类说明符 4静态说明符只能应用于变量和函数的名称以及匿名联合 [...] http://eel.is/c++draft/dcl.stc#4 此构造不声明对象或函数。任何 C++ 编译器都必须发出诊断消息以响应此类构造。 C++ 世界中不存在“编译”或“不编译”的概念。C++ 代码的正确性主要取决于编译器诊断消息的存在与否。 在这种情况下,编译器在发出诊断消息后决定继续编译可能是由于 C 语言的遗留问题,其中这种无意义的存储类说明符是合法的(尽管也没有意义)。 Best Answer αλεχολυτ 2020-05-29T23:52:13Z2020-05-29T23:52:13Z 如果一个变量是和类定义一起定义的,就可以出现这个含义,即代码转化为如下: static class Class {} var; 这意味着正在创建新定义的类的变量。Visual Studio 允许这样的构造的事实,即 只产生警告,而不是编译错误,是编译器的一个特性。 此外var,根据上下文,它可以是仅在当前文件中可用的全局变量的定义,如果它是在全局命名空间级别编写的。或者它也可以是封闭类的静态变量的声明,如果它写在类定义中: struct X { static class Class {} var; }; 在这种情况下,要使用var它,您仍然需要在外部定义它X: X::Class X::var;
这样的结构没有任何意义——原则上它是不编译的。几个世纪以来,C++
static只允许在对象或函数声明中使用存储类说明符(在这种情况下)。http://eel.is/c++draft/dcl.stc#4
此构造不声明对象或函数。任何 C++ 编译器都必须发出诊断消息以响应此类构造。
C++ 世界中不存在“编译”或“不编译”的概念。C++ 代码的正确性主要取决于编译器诊断消息的存在与否。
在这种情况下,编译器在发出诊断消息后决定继续编译可能是由于 C 语言的遗留问题,其中这种无意义的存储类说明符是合法的(尽管也没有意义)。
如果一个变量是和类定义一起定义的,就可以出现这个含义,即代码转化为如下:
这意味着正在创建新定义的类的变量。Visual Studio 允许这样的构造的事实,即 只产生警告,而不是编译错误,是编译器的一个特性。
此外
var,根据上下文,它可以是仅在当前文件中可用的全局变量的定义,如果它是在全局命名空间级别编写的。或者它也可以是封闭类的静态变量的声明,如果它写在类定义中:在这种情况下,要使用
var它,您仍然需要在外部定义它X: