类声明中固定大小的C样式数组

时间:2012-02-13 12:10:40

标签: c++

我遇到过一些基本上看起来像这样的代码:

#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";
}

问题是---作为一个类成员声明一个固定大小的数组是否真的被标准所允许?

3 个答案:

答案 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,它具有较小的开销(大小+容量,但是,通过手动分配,你必须记住大小,因此唯一的开销是容量)。