簡體   English   中英

std swap如何推導數組的長度?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM