我想将多维数组的大小定义为常量。请问最好的方法是什么?在下面的示例中,MY_CONSTANT将等于2.可以在运行时间之前确定此常量吗?
#define MY_CONSTANT <what goes here?>
std::string myArray[][3] = {
{"test", "test", "test"},
{"test", "test", "test"}
};
答案 0 :(得分:10)
您可以使用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
但我想这不是真的你想做什么。
答案 1 :(得分:3)
在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]);
答案 2 :(得分:1)
您使用的是C ++,最好使用const
代替#define
。
#define
是一个预处理程序指令,它将在编译之前执行文本替换。
const int
创建一个只读变量。
所以最好使用:const size_t arraySize = 2;
“这可以在运行时间之前确定吗?”
您必须使用new
使用动态分配的数组
或者更好地使用STL中的vector