c++ - 在类中不定义静态数组大小是不是很糟糕?--而是让它自动调整大小

标签 c++ arrays class static static-members

例如: 这是可以接受的吗?它编译并似乎对我有用;那么这是不好的形式吗?

.h 文件

class MyClass
{
  static char c[];
};

.cpp 文件

char MyClass::c[] = "abcde";

或者我必须这样做吗?

.h 文件

class MyClass
{
  static char c[10];
};

.cpp 文件

char MyClass::c[10] = "abcde";

一种技术比另一种技术有优势吗?我不确定我是否遗漏了一些东西。我不知道我不知道什么,你知道吗?

更新:

我发布的原始代码如下所示。我对其进行了编辑,使其如上所示,因为我并不是想让它的“私有(private)”方面成为讨论的重点。在我的真实代码(在 Arduino 上运行)中,我使用 .h 和 .cpp 文件,静态成员仅供类访问。 我想我也在学习一些新东西,因为有关以下代码的答案似乎告诉我私有(private)静态成员与公共(public)静态成员相同,即:它们都可以被外部的任何内容修改类如果是静态的。那,我不知道。错误,请参阅 answer by Alok Save here 。有关静态成员变量的更多信息 here 。这行对我特别有帮助:“因为静态成员变量不是各个对象的一部分,所以如果要将静态成员初始化为非零值,则必须显式定义它......这个初始化程序应该是放置在类的代码文件中(例如 Something.cpp)。如果没有初始化行,C++ 会将值初始化为 0。”

class MyClass
{
  private:
  static char c[];
};

char MyClass::c[] = "abcde";

或者我必须这样做吗?

class MyClass
{
  private:
  static char c[10];
};

char MyClass::c[10] = "abcde";

最佳答案

问题似乎是关于是否显式写入数组的大小,而不是从赋值中推断出它。考虑一下:

如果需要更改数组初始化的字符串值怎么办?如果您明确定义大小,则需要在 3 个位置进行更改。第一个在类定义中,第二个在静态变量赋值中。第三,您最终还将更改分配的字符串的值。 显式写入数组大小允许您仅在一处进行更改。此外,它还消除了忘记在字符串末尾为空终止符添加 1 的可能性。

显然,这简化了 future 的代码更改,并且不会牺牲代码的清晰度。

关于c++ - 在类中不定义静态数组大小是不是很糟糕?--而是让它自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918448/

相关文章:

c++ - 将 Boost 与 Makefile/缺少分隔符一起使用

c++ - 如何在内联回调函数中使用 EXPECT_EQ 和其他 Google Mock 语句?

c - 静态数组和动态数组的元素个数

c# - 基本类命名和可见性问题

c++ - vector 大小在构造函数外恢复为 0

c++ - 过滤图上的 boost::astar_search

c++ - 迭代 std::map 的顺序是否已知(并由标准保证)?

php - 两阶段 in_array 检查存在问题,不允许处理第二条语句

C++ - 将 float 组转换为 std::string

arrays - C++/CLI 类中不允许使用数组?