例如: 这是可以接受的吗?它编译并似乎对我有用;那么这是不好的形式吗?
.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/