模板专业化中 T[N] 和 T[] 之间的差异
Difference between T[N] and T[] in template specializations?
查看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 {};
什么时候会匹配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
是否为数组。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 如何使用默认参数等选择模板专业化
- int(c) 和 c-'0' 之间的区别。C++
- 模板化建造师专业化
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- 类模板的成员功能的定义在单独的TU中完全专业化
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- MAP和Multimap之间的C 模板专业化
- c++中两种形式的专业化模板实现之间的区别是什么
- 模板专业化中 T[N] 和 T[] 之间的差异
- 在专业化和过载之间切换
- 在基元类型模板专业化之间转换
- 为什么显式专业化和部分专业化之间的语法差异