用C ++定义数组大小

时间:2013-10-09 16:45:51

标签: c++ arrays

我想将多维数组的大小定义为常量。请问最好的方法是什么?在下面的示例中,MY_CONSTANT将等于2.可以在运行时间之前确定此常量吗?

#define MY_CONSTANT <what goes here?>

std::string myArray[][3] = { 
{"test", "test", "test"},
{"test", "test", "test"}
};

3 个答案:

答案 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