[英]How does std swap deduce the length of an array?
这是使用std :: swap交换两个数组的值的情况。
int arr1[3]={1,2,3};
int arr2[3]={4,5,6};
std::swap(arr1,arr2);
//Then arr1 becomes {4,5,6} and arr2 becomes {1,2,3}
交换函数声明为
template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
noexcept (noexcept(swap(*a,*b)));
我对size_t N
扣除的机制感到好奇,它是如何实现的? 由于int数组的指针没有有关其长度的任何信息。
仅允许对array的引用绑定到正确范围的数组。 例如,一个int (&)[10]
不能绑定到大小不是10的int
数组,也不能绑定到int*
。 当您有一个引用数组类型的参数时,也是如此。
当您将数组传递给函数并且参数不是引用时,参数将衰减为指向数组第一个元素的指针。 但是,当您通过引用传递数组时,出于模板参数推导的目的,参数类型不会衰减。 这是因为对数组参数的引用无法绑定到指针。 由于参数类型没有衰减,因此可以正确推导模板参数N
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.