所以我只是有一个问题,为什么在c++ 11中必须指定静态成员的类型才能为其分配值?
例:
class Player
{
static size_t numOfObj;
public:
Player(){numOfObj++;}
~Player(){numOfObj--;}
}
size_t Player::numOfObj = 0;
在这种情况下,为什么我必须再次指定
numOfObj
的类型为size_t
,我不能仅仅因为已经声明了Player::numOfObj = 0;
而这样做吗?提前致谢。
最佳答案
size_t Player::numOfObj = 0;
是定义的语法。 (非内联)静态变量必须在一个翻译单元中精确定义一次。不多于少(除非未使用变量)。
你可以做到的。但是不在命名空间范围内,因为那是表达式语句的语法。表达式语句可能不在 namespace 范围内。仅在块范围内允许它们。该表达式的含义是分配了变量的值。分配可以根据您的喜好(在类型为非常量且可分配的情况下)进行多次和以任意翻译单位完成。
因此,如果定义具有这种语法,则与已经具有另一种含义的语法会有冲突。那将是不可取的。
关于c++ - 类静态类型初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60891819/