c++中数组的引用传递和模板函数

       在c++中,我们知道,如果我们将一个数组作为形参传入函数中,同时我们又希望函数的操作可以影响到实参的数组。我们有两种办法,一种是将我们的数组定义成全局变量,一种是我们传入一个数组的引用。由于c++ 中的linker 我们往往不想让linker总是挂念着某个数组或者其他什么东西。所以我们想传入一个数组的引用。

  一维数组:

template<int m> void insert((&str)[m])

{

}

二维数组:

template<int m,int n> void insert((&str)[m][n])

{

}

       这样我们就传递了一个数组的引用。我们在这里使用了模板函数,他的意思是让编译器自己去计算m n的值,然后将m,n 的值带入函数中,再由编译器自己写好带入m,n 值以后的哪个具体的函数。这些都是在编译的时候就完成的,就像在编译的时候会把所有的不同形式的常量都变成具体的数字一样。这就意味着,模板函数本质上只是声明而已,只有当你去调用模板函数的时候编译器才会帮你定义好函数,并写到你的源代码里,如果你没有调用模板函数的话,那么你的模板函数就相当于什么也没写。值得一提的是MSVC编译器不会对你不使用的模板错误进行报错,但一些编译器,比如Clang会报错。对Clang相当的严格。

        所以我们只需要把我们的模板函数写到头文件里就好了,我们不需要再去其他源代码中定义这部分函数,事实上就算你想这样 linker 也不会允许。

        c++的模板是非常强大且疯狂的,而且没有什么局限性。这些可能连模板的冰山一角也算不上,如果有机会我会发csdn来详细讲解c++模板的,包括c++模板到底是怎样运作的,模板可以干什么,以及如何恰到好处的使用模板,而不是让你的代码变得疯狂。事实上我写过很多疯狂的模板,好吧,其实我是一个疯狂的人。我还总是偏爱于c++原始的数组 而不是std::array,虽然这样有时候很危险,但事实上我是个喜欢危险的人。

      

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值