我會在這裏遵循不同的方法取決於您是否有訪問到C++ 11或不。在C++ 03中,我會使用普通數組(因爲它是const),甚至可能不在類中,但在實現文件的私有名稱空間中(因爲它是私有的,假設只有一個翻譯單位的成員定義爲ImageModel
)。
// cpp
namespace {
static int gZoomLevels[] = { 1, 2, ... };
}
如果你真的想繼續使用std::vector<int>
的方法,我將創建一個翻譯單元定義成員的輔助功能,並用它來創建std::vector
,且不會與靜態的持續時間不同的變量:
namespace {
static std::vector<int> chooseANameForInitializer() {
int data[] = { 1, 2, 3 };
return std::vector<int>(data, data + (sizeof data/sizeof *data));
}
}
const std::vector<int> ImageModel::mZoomLevels = chooseANameForInitializer();
在C++ 11中,我會使用std::array<int,...>
來代替,因爲這樣可以避免動態分配和額外間接成本。當然,這不是一個好的收益,但是當你不需要它提供的任何功能的時候,沒有任何意義。
class ImageModel
{
private:
static const std::array<int,10> mZoomLevels;
};
// cpp:
const std::array<int,10> ImageModel::mZoomLevels = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
同樣,如果你堅持有std::vector<int>
那麼你可以使用列表初始化
const std::vector<int> ImageModel::mZoomLevels{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
如果是這樣'常量的std ::矢量 ImageModel :: mZoomLevels(...) '? –