我想将多维数组的大小定义为常量。请问最好的方法是什么?在下面的示例中,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;
“这个常数可以在运行前确定吗?”
您将不得不使用动态分配的数组new
或更好地使用vector
STL