如何定義宏,返回數組的大小,並可以檢查傳入的參數是否為數組

來源:互聯網
上載者:User

問題描述:

通常我們會定義數組,如int a[100];

然後再寫別的代碼,然後在程式不知道的哪個位置,傳入了一個a

我覺得他可能是個數組,但不確定,而且我還想知道a這個數組的大小。

通常我們會這麼做sizeof(a)/sizeof(a[0])

但是這樣做有問題,如果a是個對象,而剛好a這個對象重載了[ ]暈演算法,那麼這種寫法不會報告錯誤,並會將這個錯誤一直帶到後面去

因此,我們需要一種新的方法來避免這種問題。

解法:

#include<iostream>using namespace std;template <typename T, int N>char (&ASN(T (&array)[N]))[N];#define SIZEOF(array) sizeof(ASN(array))int main(){        int a[100];        cout<<SIZEOF(a)<<endl;}

解釋:

聲明一個函數,傳入任意數組的引用,並傳出char類型的同等大小數組,函數無需實現。

1、用到模版技術,支援任意類型的數組;

2、使用c的進階聲明,包括數組引用的聲明,注意[]的優先順序高於&,所以,(&array)要用括弧括起來;

3、使用sizeof的特性,因為sizeof是操作符,且在編譯時間期就執行完畢,因此,只需給出函式宣告而不用實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.