c++模板(array为例)的预处理分析

预处理可以将所有错误判断等等放到编译期,从而不影响运行速度,也方便改bug。

标准库当然肯定也是这么干的,我只是翻到了确实然后没有细看,array的实现:

意思是说, debug模式下会进入_STL_VERIFY() 的宏里面(里面其实是会消耗性能的代码),而release模式下则不检测越界所以没有任何性能消耗。嘛,学会了,我也要这么干。release下的array与c原始数组的性能是一样的,内存占用也是一样的,.size()是个常量表达式也没有性能消耗,就某些api有性能消耗,不过用原始c数组实现也多少有消耗的。但还是喜欢用原始c数组.jpg

【总】#预处理完全不能与模板参数合用!

因为预处理发生在编译时,模板的实际生成是在运行时,这我当然知道,但写起来就忘了而且VS并不会报错。如,编译器将会判断'N'字符的编码集对应的数与0作对比,于是没有报错,只能说相当灵活qwq。

标准库看起来那么臃肿,很多都是因为不能这么干,用其他方法规避产生的,如防止你输入的数组数是负数或0:size_t本质上是unsigned long long,避免了负数,然后又定义了几百行的class array<T,0>,在你输入array<int,0>的时候会重载决议到这里,对这么大几百行就为了应付你输入0,但对0个元素的数组也单独提供了所有的api支持,太尽心尽力了qwq

标准模板库为什么叫std::(study::缩写),这是在教你做事!多读多学好诶!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值