所以我有一个问题,在 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;
是定义语法。 (非内联)静态变量必须在一个翻译单元中恰好定义一次。不多也不少(除非该变量未被使用)。
can't I just do Player::numOfObj = 0; due to it being already declared?
你可以做到。但不在命名空间范围内,因为这是表达式语句的语法。表达式语句可能不在命名空间范围内。它们仅允许在 block 作用域中。这个表达式的意思是给变量赋值。您可以根据需要在任意数量的翻译单元中进行多次分配(只要类型是非常量且可分配的)。
因此,如果定义具有此语法,则会与已经具有其他含义的语法发生冲突。这是不可取的。
关于c++ - 类静态类型初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60891819/