c/c++中如果乙個函式接受乙個陣列作為引數,那麼陣列將會被退化為指標,如果定義如下**:
//陣列arr的大小未知。
int arrsize(int arr*)
//陣列arr的大小依舊未知。
int arrsize(int arr)
即使我們按上面那種定義,但陣列的的大小我們依舊不知道,但現在編譯器還會提示類似如下警告:
warning: 『sizeof』 on array function parameter 『arr』 will return size of 『int*』 [-wsizeof-array-argument]
為了更好的解決上面的問題我們可以考慮使用乙個引用形參,可以有如下**:
//陣列arr的大小必須是12,否則會報錯。
int arrsize_const_size(int (&arr)[12])
即使我們使用引用形參解決了,在函式內部我們無法正確獲取陣列大小的問題,但更複雜的問題出現了,我們只能接受固定數量的大小的陣列,解決這個問題,我們可以通過一種很常規的手法定義函式如下:
//指定乙個陣列大小n
int arrsize_n(int arr, int n)
上面雖然解決了,但我們多傳遞了乙個引數,呼叫**看起來沒有前兩個更加簡潔了,雖然問題被很好的解決了,為了更好的解決這個問題我們可以把推斷陣列大小的事交個編譯器,使用非型別模板引數。
template
int arrsize_template_size(int (&arr)[n]) return 0; }
下面給出完整的測試**:
#include using namespace std;
//陣列arr的大小未知。 int arrsize(int arr) //陣列arr的大小必須是12,否則會報錯。 int arrsize_const_size(int (&arr)[12]) //指定乙個陣列大小n int arrsize_n(int arr, int n) template int arrsize_template_size(int (&arr)[n]) return 0; } int main() ; int arr1[16] = ; arrsize(arr); arrsize_const_size(arr); cout << "-------------------------------------" << endl; arrsize_template_size(arr); cout << "-------------------------------------" << endl; arrsize_template_size(arr1); cout << "-------------------------------------" << endl; return 0; }
如果array型別也是復用的話,那麼就有最終版本:
templateint n>void print_arr_in_tpl(t (&arr)[n])
}
哈哈, 大家拿去用吧
謀膽並重 論如何優雅地進行工作安排
在工作中是否遇到下面的困惑 1.每天來到公司應該做些什麼事情感到茫然。2.對於專案不了解,進度把握不好。3.傳統的專案管理工具購買成本動輒幾十萬 上百萬,軟體部署 安裝複雜。4.經過專業的培訓都不一定能學會使用,並且並不一定能很好地解決團隊協作效率問題。面對這樣的困惑,這裡我們要給您推薦一款學習成本...
如何優雅的使用「看板」?
你需要通過看板達到什麼目的 看板三原則 1.使工作視覺化,給每人乙個專案目前的big picture。2.減少並行工作。乙個user story的生命週期被切分成較小的塊,每個人應該keep在其中一塊。3.優化工作流程。在實踐中不斷迭代看板的流程,增減某些階段,或調整從乙個階段跳轉到下乙個階段的邊界...
如何優雅的使用rem
移動端css做布局的時候,如何選擇px em rem這幾個單位呢?很多初做移動端的童鞋們,不知道如何用px em 還是用rem做移動端的布局,那就舉例說一下 如果使用 作為單位的話,在iphone4上多少會有些布局錯位,那用rem就解決了這個難題。document.documentelement.s...