簡體   English   中英

在C ++中定義數組大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM