static const std :: vector <char>初始化没有堆?

Gar*_*ryO 5 c++ vector c++11

假设我想要一个未签名字符的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."

  • 我甚至考虑把它变成'constexpr`.这使编译器有更多机会消除"v"的存储. (3认同)