当前位置: 首页 > news >正文

网站开发专业大学班级网页html源代码

网站开发专业大学,班级网页html源代码,公司网站开发计划书,天津工程建设网官方网站条款 44#xff1a;将与参数无关的代码抽离模板 模板可以节省时间和避免代码重复#xff0c;编译器会为填入的每个不同模板参数具现化出一份对应的代码#xff0c;但长此以外#xff0c;可能会造成代码膨胀#xff08;code bloat#xff09;#xff0c;生成浮夸的二进制…条款 44将与参数无关的代码抽离模板 模板可以节省时间和避免代码重复编译器会为填入的每个不同模板参数具现化出一份对应的代码但长此以外可能会造成代码膨胀code bloat生成浮夸的二进制目标码。 基于共性和变性分析commonality and variability analysis 的方法我们需要分析模板中重复使用的部分将其抽离出模板以减轻模板具现化带来的代码量。 因非类型模板参数而造成的代码膨胀往往可以消除做法是以函数参数或类成员变量替换模板参数。因类型模板参数而造成的代码膨胀往往可以降低做法是让带有完全相同二进制表述的具现类型共享实现代码。 参考以下矩阵类的例子 templatetypename T, std::size_t n class SquareMatrix { public:void Invert();... private:std::arrayT, n * n data; }; 修改为 templatetypename T class SquareMatrixBase { protected:void Invert(std::size_t matrixSize);... private:std::arrayT, n * n data; };templatetypename T, std::size_t n class SquareMatrix : private SquareMatrixBaseT { // private 继承实现见条款 39using SquareMatrixBaseT::Invert; // 避免掩盖基类函数见条款 33public:void Invert() { this-Invert(n); } // 调用模板基类函数见条款 43... }; Invert并不是我们唯一要使用的矩阵操作函数而且每次都往基类传递矩阵尺寸显得太过繁琐我们可以考虑将数据放在派生类中在基类中储存指针和矩阵尺寸。修改代码如下 templatetypename T class SquareMatrixBase { protected:SquareMatrixBase(std::size_t n, T* pMem): size(n), pData(pMem) {}void SetDataPtr(T* ptr) { pData ptr; }... private:std::size_t size;T* pData; };templatetypename T, std::size_t n class SquareMatrix : private SquareMatrixBaseT { public:SquareMatrix() : SquareMatrixBaseT(n, data.data()) {}... private:std::arrayT, n * n data; }; 然而这种做法并非永远能取得优势硬是绑着矩阵尺寸的那个版本有可能生成比共享版本更佳的代码。例如在尺寸专属版中尺寸是个编译期常量因此可以在编译期藉由常量的广传达到最优化而在共享版本中不同大小的矩阵只拥有单一版本的函数可减少可执行文件大小也就因此降低程序的 working set在“虚内存环境”下执行的进程所使用的一组内存页并强化指令高速缓存区内的引用集中化locality of reference这些都可能使程序执行得更快速。究竟哪个版本更佳只能经由具体的测试后决定。 同样地上面的代码也使用到了牺牲封装性的protected可能会导致资源管理上的混乱和复杂考虑到这些也许一点点模板代码的重复并非不可接受。 条款 45运用成员函数模板接受所有兼容类型 C 视模板类的不同具现体为完全不同的的类型如果用带有base-derived关系的B、D分别具现化同一个template产生出来的两个具现体并不带有base-derived关系但在泛型编程中我们可能需要一个模板类的不同具现体能够相互类型转换。 考虑设计一个智能指针类而智能指针需要支持不同类型指针之间的隐式转换如果可以的话以及普通指针到智能指针的显式转换。很显然我们需要的是模板拷贝构造函数成员函数模板 templatetypename T class SmartPtr { public:templatetypename USmartPtr(const SmartPtrU other): heldPtr(other.get()) { ... }templatetypename Uexplicit SmartPtr(U* p): heldPtr(p) { ... }T* get() const { return heldPtr; }... private:T* heldPtr; }; 使用get获取原始指针并将在原始指针之间进行类型转换本身提供了一种保障如果原始指针之间不能隐式转换那么其对应的智能指针之间的隐式转换会造成编译错误。 智能指针中的shared_ptr支持所有“兼容的内置指针、shared_ptr、auto_ptr和weak_ptr”的构造方法以及上述除weak_ptr外的其它的赋值操作。auto_ptr未被声明为const是因为当你复制一个auto_ptr时它其实被改动了 templateclass T class shared_ptr { public:templateclass Yexplicit shared_ptr(Y* p);templateclass Yshared_ptr(shared_ptrY const r);templateclass Yexplicit shared_ptr(weak_ptrY const r);templateclass Yexplicit shared_ptr(auto_ptrY r);templateclass Yshared_ptr operator(shared_ptrY const r);templateclass Yshared_ptr operator(autoY r); } 模板构造函数并不会阻止编译器暗自生成默认的构造函数所以如果你想要控制拷贝构造的方方面面你必须同时声明泛化拷贝构造函数和普通拷贝构造函数相同规则也适用于赋值运算符 templatetypename T class shared_ptr { public:shared_ptr(shared_ptr const r); // 拷贝构造函数templatetypename Yshared_ptr(shared_ptrY const r); // 泛化拷贝构造函数shared_ptr operator(shared_ptr const r); // 拷贝赋值运算符templatetypename Yshared_ptr operator(shared_ptrY const r); // 泛化拷贝赋值运算符... };
http://www.hkea.cn/news/14366616/

相关文章:

  • 廊坊做网站多少钱wordpress用户访问频率
  • wordpress怎么给会员加上期限湖北优化网站建设
  • 中国建设银行官方网站诚聘英才频道网站策划技巧
  • 潍坊网站建设公司有哪些wordpress 放弃
  • 南宁建设职业技术学院招聘信息网站化妆品网站建设的论文
  • 做ppt找素材的网站泉州网站设计理念培训
  • 用react做的网站上传佛山做网站的公司有哪些
  • 做网站新闻最好的搜索引擎
  • 怎么做网站文章优化wordpress代理服务器
  • 潍坊网站建设网超网站验证码怎么做的
  • 凡科做网站视频哪有做网站推广
  • 网站建设中的功能湖南建设银行官网网站首页
  • 网站的pdf目录怎么做的深圳网站建设软件开发公司排名
  • 云南省新农村建设网站只有asp网站代码可以重新编译吗
  • 网上虚拟银行注册网站公司注册资本多少有什么关系
  • 看房子建设进度的网站上行10m企业光纤做网站
  • 烟台网站建设方案wordpress产品展示主题
  • 民网东莞网站建设佛山旺道seo
  • 网站建设管理调研提纲建设网站商品怎么弄
  • 北京杰诚 做网站宁波白云医院网站建设
  • 抖音电商网站建设可以做免费推广的网站有哪些
  • 无锡做推广的网站网站风格模板
  • 在哪里找手机网站建设公司西宁做网站的
  • 营销型网站制作价格有移动端网站 怎么做app
  • 自考网站建设与管理视频制作和剪辑软件
  • 宁波网站排名方法陕西建设网综合便民服务中心网站
  • wordpress 固定链接结构出错wordpress 优化方案
  • 舟山网站建设开发wordpress首页加登录
  • 河南企业站seo深圳网站建设公司的英文名是
  • 住房和城乡建设部的网站首页WordPress迁移服务器和域名