c++ - 类静态类型初始化

标签 c++

所以我有一个问题,在 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/

相关文章:

c++ - 如何将元素添加到链表的前面?

c++ - 如何保留 C++ 流的格式?

c++ - 是否有可能在编译时强制两个派生类总是为覆盖函数返回不同的值?

c++ fstream read()函数不起作用

c++ - 具有 vector 键的高效 C++ 关联容器

c++ - 高效的 float 到 int 且不会溢出

c++ - 执行 cv::warpPerspective 以在一组 cv::Point 上进行假偏斜

C++类重定义错误求助

C++ 单例类返回 const 引用

c++ - C++ 中是否存在内存泄漏 "undefined behavior"类问题?