我遇到过一些基本上看起来像这样的代码:
#include<iostream>
// in a header file
class xxx{
public:
xxx() { xxx_[0]=0; xxx_[1]=0; xxx_[2]=0;}
double x0() const {return xxx_[0];}
private:
double xxx_[3]; // ???
};
// in the main.cpp
int main(){
xxx x;
std::cout<<x.x0()<<"\n";
}
问题是---作为一个类成员声明一个固定大小的数组是否真的被标准所允许?
答案 0 :(得分:4)
上述代码没有任何问题。它可能不是写它的最佳方式,但它没有任何本质上的错误。
是的,您的类xxx可能包含固定大小的数组作为成员。它也允许在C中使用。
即使在阅读标题以使用它时,编译器也知道将sizeof(xxx)作为结果有多大。
答案 1 :(得分:3)
将静态数组声明为类的成员是没有错的:
class A
{
int a[3];
};
答案 2 :(得分:1)
允许。
设计方面,这通常并不理想;数组没有像std::array
那样的好界面:
std::array<double,3> xxx_;
for (auto it : xxx_) {...}
xxx_.size()
std::transform (xxx_.begin(), xxx_.end(), ...);
等。因此,如果您发现自己在大多数时间使用(静态大小)数组作为容器,则应将其替换为std::array
(没有空间开销)。如果你需要动态大小的数组,请查看std::vector
,它具有较小的开销(大小+容量,但是,通过手动分配,你必须记住大小,因此唯一的开销是容量)。