类中声明无长度静态数组,类外指定长度定义是否合法?
静态数组类内声明与类外定义的合法性解答
这段代码的写法是完全合法的,不需要在类定义中就声明为buffer[100]。
具体说明:
- 在C++中,类内部对静态成员的声明可以使用不完全类型,比如这里的
static char buffer[];——这只是一个声明,不会为数组分配内存,仅告诉编译器这个静态成员存在。 - 必须在类外部的全局作用域(或对应命名空间内)提供完整的定义,也就是
char Foo::buffer[100];,这一步才会真正为静态数组分配100字节的内存空间。 - 你也可以选择在类定义中直接写
static char buffer[100];,这同样合法。但类内用空方括号声明、类外指定大小定义的方式更灵活,比如可以根据不同编译场景在外部定义不同大小的数组(尽管实际开发中很少这么用,但语法上是允许的)。
用户提供的代码示例:
class Foo { private: static char buffer[]; }; char Foo::buffer[100];
内容的提问来源于stack exchange,提问作者Bart Friederichs
相关产品推荐
相关产品推荐

