类声明中固定大小的C样式数组
fixed size C-style arrays in class declarations
我遇到了一些代码,基本上看起来像这样:
#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";
}
问题是,标准真的允许将固定大小的数组声明为类成员吗?
上面的代码没有任何错误。这可能不是写它的最佳方式,但它本质上没有什么问题
是的,您的类xxx可能包含一个固定大小的数组作为成员。它在C中也是允许的。
编译器,即使在读取头以使用它时,也知道结果是sizeof(xxx)有多大。
将静态数组声明为类的成员没有错:
class A
{
int a[3];
};
这是允许的。
然而,从设计角度来看,这通常并不理想;数组没有std::array
那样好的接口:
std::array<double,3> xxx_;
for (auto it : xxx_) {...}
xxx_.size()
std::transform (xxx_.begin(), xxx_.end(), ...);
等等。因此,如果您发现自己大部分时间都在使用(静态大小的)数组作为容器,则应该将其替换为std::array
(它没有空间开销)。如果您需要动态大小的阵列,请查看std::vector
,它的开销很小(大小+容量,但是,在手动分配时,您也必须记住大小,因此唯一的开销是容量)。
相关文章:
- 将包含C样式数组的对象初始化为成员变量(C++)
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 如何在谷歌模拟中匹配 C 样式数组
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 解压缩 C 样式数组以及C++中的参数包
- 复制 C 样式数组和结构
- C++中循环和 C 样式数组的范围工作
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- std::array与C样式数组用于连续内存
- 从原始指针(衰减的 C 样式数组)和大小生成范围::视图
- 不要声明 C 样式数组,而是使用 std::array<>
- 带C++的 C 样式数组?
- 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?
- 将 unique_ptr<std::vector> 与 c 样式数组结合使用
- 为什么我不能将 C 样式数组复制到 std::array?
- 函数需要 C 样式数组
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 何时需要删除 C 样式数组
- C++ C 样式数组作为语法错误的参数