Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ T[N]和T[]在模板专门化方面的差异?_C++_Templates_Template Specialization - Fatal编程技术网

C++ T[N]和T[]在模板专门化方面的差异?

C++ T[N]和T[]在模板专门化方面的差异?,c++,templates,template-specialization,C++,Templates,Template Specialization,查看std::is_array,它们有以下代码: template<class T> struct is_array<T[]> : std::true_type {}; template<class T, std::size_t N> struct is_array<T[N]> : std::true_type {}; 模板 结构是_数组:std::true_类型{}; 模板 结构是_数组:std::true_类型{}; 什么时候匹配T[]专

查看
std::is_array
,它们有以下代码:

template<class T>
struct is_array<T[]> : std::true_type {};

template<class T, std::size_t N>
struct is_array<T[N]> : std::true_type {};
模板
结构是_数组:std::true_类型{};
模板
结构是_数组:std::true_类型{};

什么时候匹配
T[]
专门化而不是
T[N]
专门化?为什么需要两个?我假设这个
T[]
与函数参数中的不同,在函数参数中,它与指针的含义相同,对吗?

类型
T[]
是一个不完整的类型,已知它是一个数组,但此时大小(也是类型的一部分)未知。它可以在某些上下文中使用,在这些上下文中,您可能需要检查声明为数组的变量是否为数组。虽然变量的类型仍然不完整,
std::array
的第二个专门化将不匹配,因为大小未知

// test.h
struct Test {
   static int data[];
};
// test.cpp
int Test::data[10];
仅包含标头但不具有
test.cpp
可见性的TU可能需要测试
test::data
是否为数组