在C语言中,我们可以创建如下所示的静态全局数组:
static struct A a1 [] = { 1,2,3,4};
因此我们可以使用以下计算方法确定尺寸
sizeof(a1)/sizeof(a1[0])
如果它包含可变长度值字符串的std :: string,我们如何使用std :: array在C ++中实现相同的目标?
struct A
{
std::string b;
int x;
};
答案 0 :(得分:3)
首先,您的示例未使用可变长度数组(C ++不具有C具有的可变长度数组功能。C++具有std::vector
,这是不同的)。 a1
数组的大小为编译时。大小由初始化决定:您指定了4个元素来初始化数组,因此大小为4。
如果您想拥有一个std::array
,而无需指定其大小,则可以使用C ++ 17使用类模板参数推导功能来实现:
#include <array>
struct A {
std::string b;
int x;
};
std::array a1 = { // template arguments will be deduced
A{ "a", 1 },
A{ "abc", 2 }
};
int main() {
return a1.size(); // will return 2, as a1 has a size of 2
}
不幸的是,使用C ++ 11不能做到这一点。
如果您不必拥有std::array
,则可以像您的示例一样进行操作(您可以这样做,因为sizeof(A)
是常数,所以大小无关紧要b
中的字符串):
struct A {
std::string b;
int x;
};
A a1[] = {
{ "a", 1 },
{ "abc", 2 }
};
int main() {
return sizeof(a1)/sizeof(a1[0]); // returns 2
}