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

仿制网站侵权吗福州网站推广

仿制网站侵权吗,福州网站推广,网站开发技术总结,标准件做网站推广效果怎么样深入理解C模板:从原理到实践 引言1、模板基础知识1.1 函数模板1.2 类模板 2、模板实例化机制2.1 两阶段编译2.2 实例化控制 3、模板参数推导3.1 类型推导规则3.2 CTAD(类模板参数推导) 4、模板特化与偏特化4.1 全特化4.2 偏特化 5、模板元编程…

深入理解C++模板:从原理到实践

  • 引言
  • 1、模板基础知识
    • 1.1 函数模板
    • 1.2 类模板
  • 2、模板实例化机制
    • 2.1 两阶段编译
    • 2.2 实例化控制
  • 3、模板参数推导
    • 3.1 类型推导规则
    • 3.2 CTAD(类模板参数推导)
  • 4、模板特化与偏特化
    • 4.1 全特化
    • 4.2 偏特化
  • 5、模板元编程
    • 5.1 编译时计算
    • 5.2 SFINAE与类型检查
    • 5.3 C++20概念(Concepts)
  • 6、模板实践建议

引言

C++模板是泛型编程的核心工具,它允许开发者编写与类型无关的代码。然而,模板的实现机制和编译过程往往令人感到神秘。本文将通过模板实例化过程类型推导规则模板元编程三个维度,深入理解C++模板的工作原理。

1、模板基础知识

1.1 函数模板

template <class T>
void Swap(T& a, T& b) {T temp = a;a = b;b = temp;
}
  • 编译器通过调用上下文推导T的类型。
  • 生产具体类型版本的过程成为隐式实例化
template <class T>
void Swap(T& a, T& b) {T temp = a;a = b;b = temp;
}int main() {int a = 1, b = 2;std::cout << a << " " << b << std::endl;Swap(a, b);std::cout << a << " " << b << std::endl;std::cout << "---------" << std::endl;double c = 1.2, d = 3.4;std::cout << c << " " << d << std::endl;Swap(c, d);std::cout << c << " " << d << std::endl;return 0;
}

自动推导类型

自动推导类型

1.2 类模板

template <class T>
class Vector {
public:Vector(int n = 5): size_(0), capacity_(n){data_ = new T[n];}void PushBack(const T& item) {// 尾插逻辑...}~Vector() {delete[] data_;size_ = capacity_ = 0;}
private:T* data_;int size_;int capacity_;
};
  • 必须显式指定模板参数类型(C++17前)。
  • 支持成员函数模板和静态成员。
template <typename T>
class Vector {
public:Vector(int n = 5): size_(0), capacity_(n){data_ = new T[n];}void PushBack(const T& item) {// 尾插逻辑...}~Vector() {delete[] data_;size_ = capacity_ = 0;}
private:T* data_;int size_;int capacity_;
};int main() {Vector<int> v;return 0;
}

typename是用来定义模板参数的关键字,也可以使用class

2、模板实例化机制

2.1 两阶段编译

  1. 模板定义阶段:检查语法和与模板参数无关的错误。
  2. 实例化阶段:生产具体类型的代码,检查类型相关操作。

模板实例化

2.2 实例化控制

  • 显示实例化(减少代码膨胀)。
template <class T>
void Swap(T& a, T& b) {T temp = a;a = b;b = temp;
}template <class T>
class Vector {
public:Vector(int n = 5): size_(0), capacity_(n){data_ = new T[n];}void PushBack(const T& item) {// 尾插逻辑...}~Vector() {delete[] data_;size_ = capacity_ = 0;}
private:T* data_;int size_;int capacity_;
};template class Vector<int>; // 显示实例化整个类
template void Swap<int>(int&, int&); // 显示实例化函数
  • 外部实例化声明(C++11)。
extern template class Vector<int>;

3、模板参数推导

3.1 类型推导规则

  • 函数模板参数推导遵循以下优先级:
    1. 完美匹配。
    2. 类型提升(float → \rightarrow double)。
    3. 标准转换(int → \rightarrow long)。
    4. 用户定义转换。

3.2 CTAD(类模板参数推导)

  • C++17引入的自动推导机制。
std::vector v{1,2,3}; // 推导为std::vector<int>

4、模板特化与偏特化

4.1 全特化

template <>
class ClassName<void*> {//针对void*类型的特殊实现
};

4.2 偏特化

template <class T>
class ClassName<T*> {//针对所有指针类型的通用实现
};

5、模板元编程

5.1 编译时计算

template <int N>
struct Factorial {static const int ret = N * Factorial<N - 1>::ret;
};template <>
struct Factorial<0> {static const int ret = 1;
};int main() {std::cout << Factorial<5>::ret << std::endl; // 120return 0;
}

5.2 SFINAE与类型检查

template <class T>
class std::enable_if<std::is_integral<T>::value>::type process(T val) {// 仅对整数类型生效的实现
}

5.3 C++20概念(Concepts)

template <class T>
requires std::floating_point<T>
T precise_calc(T a, T b) {// 高精度浮点计算
}

6、模板实践建议

  1. 避免过度使用模板元编程(TMP)。
  2. 使用static_assert进行模板参数校验。
  3. 注意模板导致的代码膨胀问题。
  4. 有限选择标准库类型特征(type_traits)
http://www.dtcms.com/wzjs/555006.html

相关文章:

  • 网页网站设计公司排行榜wordpress wshk
  • 信誉好的盐城网站开发安阳手机网站建设
  • 网站风格分析江苏省工程建设招标网站
  • 五台建设局网站网站发布和推广
  • 网站设计字体大小规范徐州开发区中学网站
  • 做网站编辑的发展方向晋升Wordpress数据怎么导出
  • 网站建设做什么会计科目山东公司网站开发
  • 贵阳市观山湖区网站建设个人建网站成本
  • 网站开发需要的工具安装 好了wordpress那里进入
  • 行业网站如何推广电子商务能从事什么工作
  • 深圳哪里有网站建设北京互联网营销公司
  • 做外汇的网站wordpress免费版能加标签
  • 石家庄医疗网站建设网站里的活动专题栏怎么做
  • 企业门户网站特征开源php表单系统
  • 房屋中介网站模板怎样做校园网站
  • 银川网站建设哪家优婚纱网站制作
  • 网上做效果图网站如何在手机上做自己的网站6
  • 深圳网站开发设计公司排名郑州设计公司有哪些
  • 南昌网站建设公司网站建设公司哪家好一站式做网站公司
  • php中网站搜索功能实现如何自己做淘宝网站
  • 做外国网站自媒体动漫做暧视频在线观看网站
  • 开发网站过程随州做网站的公司
  • 做百度推广得用网站是吗wordpress文章筛选
  • 网站开发架构分类网站数据丢失
  • 带表情的wordpress留言seo网站建设时文章频率
  • 酒店如何做团购网站个人网站主页怎么做
  • 移动商城 网站建设方法方式网络营销的机遇和挑战
  • 公司 网站 苏州wordpress slider使用
  • 北京网站设计十年乐云seo怎么做网站自己当站长
  • 怎样建设一个网站wordpress 众筹模板