c++ - 在另一个数组中使用一个数组的大小

标签 c++ arrays templates size

// sizeofarray.cpp
#include <iostream>
template <typename T,int N>
int size(T (&Array)[N])
{
  return N;
}

int main()
{
   char p[]="Je suis trop bon, et vous?";
   char q[size(p)]; // (A)
   return 0;
}

我听说 C++ 中的数组大小必须是常量表达式。所以 char q[size(p)] 是无效的,对吗?但是当我尝试时没有错误

 g++ -Wall sizeofarray.cpp

为什么?

最佳答案

Prasoon says ,它不是一个常量表达式。现在,您可以获得数组大小的常量表达式值,如下所示:

template <std::size_t N>
struct type_of_size
{
    typedef char type[N];
};

template <typename T, std::size_t Size>
typename type_of_size<Size>::type& sizeof_array_helper(T(&)[Size]);

#define sizeof_array(pArray) sizeof(sizeof_array_helper(pArray))

说明 here .您基本上将数组的大小编码为一种类型的大小,然后获取该类型的 sizeof,从而得到:

char q[sizeof_array(p)];

关于c++ - 在另一个数组中使用一个数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831158/

相关文章:

c++ - 如何从字符串位置构造 CString/std::string

javascript - 如何以特定格式将多个数组传递给我的函数?

c++ - 对字符数组感到困惑

javascript - 如何使用对象点键和数组点图进行迭代以显示组件中的数据?

templates - Play 2 : How to compare strings in scala template?

javascript - angularJS 模板,正确使用指令或替代方案?

c++ - 返工 make 文件以将 obj 放入不同的位置

c++ - 使用 Homebrew 软件安装 GTK+,但 pkg_check_modules 无法识别它

c++ - 如何在文本突出显示期间保留语法突出显示

c++ - 重载成员函数的 decltype