关于非类型形参导致代码膨胀的问题
时间:2011-11-28
来源:互联网
C/C++ code
下面这个可以避免重复代码生成??费解,对于这个模板导致重复代码生成的问题很迷茫,网大牛们解释哈吧!
#include <iostream> #include <vector> using namespace std; //关于非类型形参导致的代码膨胀问题 /**template<class T,size_t N> class base { public: void invert(); private: T mt[N]; }; template<class T,size_t N> void base<T,N>::invert() { //....省略对数组的转置 }**/ //对于这段代码来说,effective C++上说会导致code bloat,原因是非类型形参如果改成下面代码: //-------------------------------------------------------------------- template<class T> class base { public: base(T *p):pt(p){} protected: void invert(size_t ix) { //....省略对数组的转置 cout << "hello" << endl; } private: T *pt; }; template<class T> class derived:private base<T> { public: derived(T *p,size_t it):base<T>(p),size(it){} using base<T>::invert; void invert() { this->invert(size);//调用基类的转置函数来实现 } private: size_t size; }; int main () { int im[10] = {5,4,6,2,4,5,6,7,9,41}; derived<int> md(im,5); md.invert(); }
下面这个可以避免重复代码生成??费解,对于这个模板导致重复代码生成的问题很迷茫,网大牛们解释哈吧!

作者: qscool1987 发布时间: 2011-11-28
对上面那个来说不同的N相同的T都需要生成不同的类定义。但是下面的只要T相同就只有一份类定义
作者: pengzhixi 发布时间: 2011-11-28
引用 1 楼 pengzhixi 的回复:
对上面那个来说不同的N相同的T都需要生成不同的类定义。但是下面的只要T相同就只有一份类定义
对上面那个来说不同的N相同的T都需要生成不同的类定义。但是下面的只要T相同就只有一份类定义
你总是能一语中的,可是我感觉这样反而复杂了不少,如果对于一般的程序来说可读性不好,是类库的话那必须这么做
作者: qscool1987 发布时间: 2011-11-28
后面用动态内存分配代码并不复杂多少。反倒是你前面的那个版本让编译器编译的时候压力很大。
作者: pengzhixi 发布时间: 2011-11-28
只有用到的代码才会被编译。像数组反转这样会被内联的简单函数,对体积是没有影响的。
作者: mingliang1212 发布时间: 2011-11-28
引用 4 楼 mingliang1212 的回复:
只有用到的代码才会被编译。像数组反转这样会被内联的简单函数,对体积是没有影响的。
只有用到的代码才会被编译。像数组反转这样会被内联的简单函数,对体积是没有影响的。
内联反而会导致代码膨胀
作者: pengzhixi 发布时间: 2011-11-28
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28