假设我想要一个未签名字符的std :: vector.它是用初始化列表(这是C++ 11)初始化的,永远不会改变.我想避免任何堆分配,即使在启动时,也要让整个向量像const字符串一样存在于数据段中.那可能吗?即:(
static const vector<char> v{0x1, 0x2, 0x3, 0x0, 0x5};
这是一个有点学术性的问题;我知道为此只使用C数组并不难.)
Arn*_*rah 13
为什么不直接使用std::array
?
static const std::array<char, 5> v{0x1, 0x2, 0x3, 0x0, 0x5};
Run Code Online (Sandbox Code Playgroud)
这避免了任何动态分配,因为std::array
使用的内部数组很可能被声明为T arr[N]
N是您在模板中传递的大小(此处为5).
当你在这里时,你甚至可能想要制作变量constexpr
,正如@MSalters指出的那样,"为编译器提供了更多机会来消除存储空间v
."