当前位置: 首页> 房产> 政策 > 黄骅港务集团_企业信息公示管理系统山东_无锡百姓网推广_免费推广的网站平台

黄骅港务集团_企业信息公示管理系统山东_无锡百姓网推广_免费推广的网站平台

时间:2025/7/12 20:40:51来源:https://blog.csdn.net/tanyongxi66/article/details/145971993 浏览次数:1次
黄骅港务集团_企业信息公示管理系统山东_无锡百姓网推广_免费推广的网站平台

引言

C++ 模板是泛型编程的基础,它允许我们编写与类型无关的通用代码。通过模板,我们可以实现代码复用,提高开发效率。本文将介绍模板参数的使用及注意事项、模板类与类模板的区别,并通过示例帮助您快速掌握 C++ 模板的基本用法。

1. 模板参数以及注意事项和调用方式

1.1 模板参数

模板参数是模板定义中的占位符,用于在编译时替换为具体的类型或值。模板参数分为两种:

  1. 类型参数:用 typename 或 class 关键字声明。
  2. 非类型参数:可以是整数、指针或引用等。
1.1.1 类型参数

示例

template <typename T>
T add(T a, T b) {return a + b;
}
1.1.2 非类型参数

示例

template <int N>
void printSize() {std::cout << "Size: " << N << std::endl;
}
  • N 是一个非类型参数,必须是编译时常量。
  • 1.2 注意事项

  • 模板参数的作用域

    • 模板参数的作用域仅限于模板定义内部。

示例:

template <typename T>
void func() {T value; // T 是模板参数
}

模板参数的默认值

  • 可以为模板参数指定默认值。

示例:

template <typename T = int>
class MyClass {// T 默认为 int
};

模板参数的推导

  • 编译器可以根据函数参数自动推导模板参数。

示例:

template <typename T>
void print(T value) {std::cout << value << std::endl;
}
print(10); // T 被推导为 int

1.3 调用方式

  1. 显式调用

    • 手动指定模板参数。

示例:

int result = add<int>(10, 20); // 显式指定 T 为 int

隐式调用

  • 编译器根据参数自动推导模板参数。

示例:

int result = add(10, 20); // 编译器推导 T 为 int

2. 模板类与类模板的区别

2.1 模板类

  • 定义

    • 模板类是通过模板参数生成的具体的类。

示例:

template <typename T>
class MyClass {
public:T value;MyClass(T v) : value(v) {}
};// 使用模板类
MyClass<int> obj(10); // 模板类 MyClass<int>
  • 特点

    • 模板类是一个具体的类,模板参数已经被替换为实际类型。

2.2 类模板

  • 定义

    • 类模板是模板的定义,它本身不是一个具体的类,而是一个生成类的蓝图。

示例:

2.2 类模板
定义:类模板是模板的定义,它本身不是一个具体的类,而是一个生成类的蓝图。

2.3 区别总结

特性模板类类模板
定义通过模板参数生成的具体的类模板的定义,生成类的蓝图
实例化已经实例化为具体的类需要通过模板参数实例化为具体类
使用方式直接使用需要指定模板参数

2.4 示例对比

// 类模板
template <typename T>
class Box {
public:T content;Box(T c) : content(c) {}
};// 模板类
Box<int> intBox(10); // Box<int> 是一个模板类
Box<double> doubleBox(3.14); // Box<double> 是另一个模板类

总结

  • 模板参数分为类型参数和非类型参数,使用时需要注意作用域、默认值和推导规则。
  • 模板类是通过模板参数生成的具体的类,而类模板是生成类的蓝图。
  • 掌握模板的基本用法是理解 C++ 泛型编程的关键。
关键字:黄骅港务集团_企业信息公示管理系统山东_无锡百姓网推广_免费推广的网站平台

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: