[英]Defining Array Size in C++
我想將多維數組的大小定義為常量。 請問這樣做的最好方法是什么? 在下面的示例中,MY_CONSTANT等於2。可以在運行時間之前確定此常數嗎?
#define MY_CONSTANT <what goes here?>
std::string myArray[][3] = {
{"test", "test", "test"},
{"test", "test", "test"}
};
您可以使用std::extent
在編譯時獲取數組的大小:
std::string myArray[][3] = {
{"test", "test", "test"},
{"test", "test", "test"}
};
const std::size_t myArraySize = std::extent<decltype(myArray)>::value;
預處理器將無法直接定義該值。 當然可以用
#define MY_CONSTANT std::extent<decltype(myArray)>::value
但是我想那不是您真正想做的。
在C ++ 11中,可以使用constexpr
函數來初始化編譯時常量:
template <typename T, size_t N>
constexpr size_t array_size(T(&)[N]) {return N;}
constexpr size_t MY_CONSTANT = array_size(myArray);
(或者使用std::extent
作為另一個答案;我對此一無所知)。
從歷史上看,您需要使用一個常量表達式來初始化它,例如
const size_t MY_CONSTANT = sizeof(myArray) / sizeof(myArray[0]);
您正在使用C ++,最好使用const
而不是#define
。
#define
是一個預處理指令,它將在編譯之前執行文本替換。
const int
創建一個只讀變量。 所以最好使用這樣的東西: const size_t arraySize = 2;
“可以在運行時間之前確定此常數嗎?”
您將必須使用來自STL的new
或更好使用的vector
來使用動態分配的數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.