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