有什么方法可以在類中宣告具有傳遞給建構式的大小的靜態陣列嗎?如果大小必須為 const 并且無法在運行時設定它,那也沒關系。
我試著做這樣的事情:
class class_name
{
public:
float* map;
class_name(int n, const int d)
{
float arr[d];
map = arr;
}
};
但我覺得這可能是個壞主意。不好嗎?如果是,那為什么?
uj5u.com熱心網友回復:
是的,這段代碼
class_name(int n, const int d)
{
float arr[d];
map = arr;
}
是個壞主意,有兩個原因
float arr[d];
在堆疊中創建一個區域變數,因此它在塊的末尾不再存在。所以map
變成了一個懸空指標。如果您需要動態大小分配,您應該使用std::vector<float> map
并避免很多麻煩。float arr[d];
是一個可變長度陣列,而 C 不支持這些。使d
beconst
沒有幫助,它必須是一個實際的常量,而不是const
變數。
解決方案:由于您說可以在編譯時確定陣列長度,因此這非常適合模板:
template <std::size_t N>
class class_name
{
public:
std::array<float, N> map { {} }; // { {} } causes value initialization of everything to 0
// actually above could be `float map[N];` but it has the C array gotchas
class_name(int n)
{
// not sure what n is for...
}
};
并宣告這個類的一個變數:
class_name<5> obj; // obj.map size is 5
uj5u.com熱心網友回復:
“靜態陣列”是指大小不變的東西嗎?std::unique_ptr<float[]>
, 和std::make_unique(std::size_t)
, 可能是一個選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454374.html