我是靠谱客的博主 成就金毛,这篇文章主要介绍C++ 实现计算数组大小的函数,对函数参数的正确使用的认识,现在分享给大家,希望可以做个参考。

数组的大小计算,不就是一个sizeof吗?

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    int a[]{1,2,3,4,5,6,7,8,9,0};            
    cout << sizeof(a)/sizeof(int) << endl;
}

结果正确。写成函数,应当没有问题吧。

int lenOfArray(int a[])
{
    return sizeof(a)/sizeof(int);    
}

结果必须不正确。因为数组名作参数,传过去的是 指针变量,编译器支提示我们 它sizeof(a)是指 sizeof(int*)。

指针不行,引用行吧。

int lenOfArray(int (&a)[])
{
    return sizeof(a)/sizeof(int);    
}

不能调用。因为sizeof函数反馈引用a定义不确定。a可以用来引用各种大小的对象。

有什么办法呢?

模板出来了。

template<typename T>
int lenOfArray(T &a){
    return sizeof(a)/sizeof(a[0]);
}

结果正确。 这个T在应用的时候,确定为引用对象的正确形式。

模板真是强大的。

还有更强大方便的。

template<typename T, int N>
int lenOfArray(T(&arr)[N])
{
    return N;
}

结果正确,不用计算的。直接利用的模板填写时的成果。

这一历程告诉我们,要正确的判断 参数的性质利用模板的填写机制

最后

以上就是成就金毛最近收集整理的关于C++ 实现计算数组大小的函数,对函数参数的正确使用的认识的全部内容,更多相关C++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(151)

评论列表共有 0 条评论

立即
投稿
返回
顶部