C++法则9:相同类型的两个数组如果大小不同,是不同类型。
在 C++ 中,数组的类型不仅由其元素类型决定,还由其大小决定。这是 C++ 类型系统的一个重要规则,通常被称为 "数组大小是类型的一部分"。具体来说:
法则解析:
如果两个数组的 元素类型相同 但 大小不同,那么它们是 不同的类型。
int a[10],b[42]; 
template<typename T> T fref(const T&, const T&); //引用
fref(a,b); //错误:数组类型不匹配
关键影响:
- 
	函数重载:可以基于数组大小重载函数。 void foo(int (&arr)[10]); // 只接受大小为 10 的 int 数组 void foo(int (&arr)[20]); // 只接受大小为 20 的 int 数组 
- 
	模板推导:模板可以推导数组大小。 template <typename T, size_t N> void bar(T (&arr)[N]) { /* N 会被推导为数组大小 */ }
- 
	指针退化:数组可以退化为指针(丢失大小信息)。 int* p = arr1; // 退化为指向首元素的指针,类型信息丢失 
- 
	类型不兼容:不能直接赋值或初始化。 int arr3[10] = arr1; // 错误:不能直接用另一个数组初始化 
为什么这样设计?
- 
	类型安全:确保编译器能检查数组越界(如函数参数传递时)。 
- 
	模板元编程:支持编译时计算(如 std::array的实现依赖此特性)。
- 
	与 C 的兼容性:C 语言中数组大小也是类型的一部分,C++ 继承了这一规则。 
例外情况:
当数组作为函数参数时,会退化为指针(失去大小信息):
void func(int arr[]); // 实际是 void func(int* arr)
如果需要保留大小信息,必须使用引用传递:
void func(int (&arr)[10]); // 保留大小信息
总结:
- 
	数组类型 = 元素类型 + 大小。 
- 
	不同大小的数组是不同类型,影响重载、模板和类型检查。 
- 
	理解此规则有助于避免错误(如数组越界)并编写更安全的代码。 
 
                   
                   
                   
                   
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   4446
					4446
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            