我想將多維數組的大小定義爲常量。請問最好的方法是什麼?在下面的例子中,MY_CONSTANT等於2.這個常量可以在運行時間之前確定嗎?在C++中定義數組大小
#define MY_CONSTANT <what goes here?>
std::string myArray[][3] = {
{"test", "test", "test"},
{"test", "test", "test"}
};
我想將多維數組的大小定義爲常量。請問最好的方法是什麼?在下面的例子中,MY_CONSTANT等於2.這個常量可以在運行時間之前確定嗎?在C++中定義數組大小
#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
,但我想這不是真的你想做的事。
,更好地利用const
代替#define
。
#define
是一個預處理器指令,它將在編譯之前執行文本替換。
const int
創建一個只讀變量。 所以最好用類似的東西:const size_t arraySize = 2;
「這個常數是否可以在運行時間之前確定?」
,你將不得不使用使用new
或更好地利用vector
動態分配數組從STL
在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]);
+1對'constexpr'和歷史課:) –
'常量的std ::爲size_t ARRAY_SIZE = 2初始化它;'?順便說一句,當你有*常量*大小的數組,或者'std :: vector'(或者'std :: deque')時,更喜歡'std :: array'。 – Nawaz
在C++中,您應該將'const'變量設置爲'#define'。它們可以用作編譯時常量,也可以用作範圍。 –