繁体   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