c++ - C++ 模板中的代码重用(或不重用)

标签 c++ templates

到目前为止,在我读过的所有书籍中,他们都说 C++ 模板为我们使用的每种类型生成一个代码实例。

另一方面,书上说在 C# 中代码是重用的。

所以我在很多书中进行了搜索,在一本非常古老的书中找到了以下 C# 示例。

1) 值类型

List<int> intList1  = new List<int>();
List<int> intList2  = new List<int>();
List<bool> boolList = new List<bool>();

在这种情况下(值类型),编译器为 intList1 和 intList2(相同类型)生成一个代码实例,为 boolList 生成一个代码实例。

2)引用类型

List<Dog> dogList1 = new List<Dog>();
List<Dog> dogList2 = new List<Dog>();
List<Cat> catList  = new List<Cat>();

在这种情况下(引用类型),编译器只为 dogList1、dogList1 和 catList 生成一个代码实例,因为只要它可以表示指向对象的指针,所有引用类型都可以共享一个实现。

这对我来说非常清楚(作为 C++ 开发人员),但我对与 C++ 模板有关的相同事情感到好奇。

早在创建 C# 之前,C++ 也有值类型和引用类型。

那么让我们用 C++ 重写 avove 示例

1) 值类型

vector<int> intList1;
vector<int> intList2;
vector<bool> boolList;

在这种情况下,我毫不怀疑 intList1 和 intList2 共享相同的代码,而 boolList 需要另一个实现

2)引用类型

vector<Dog *> dogList1;
vector<Dog *> dogList2;
vector<Cat *> catList;

我的问题是:

我能否得出结论,在第二种情况下(指针的 vector )都共享相同的模板实例化,只要所有 vector 指针( vector 和 vector )并且所有指针的大小都相同(32 位或 64 位取决于平台)?

最佳答案

(您的问题有点困惑,但让我跳过它并解决实际问题)。

不,你不能假设。

这主要是因为无论您的系统是 32 位还是 64 位,指针不一定必须具有相同的大小。

关于c++ - C++ 模板中的代码重用(或不重用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33212499/

相关文章:

c++ - 这个 C++ 定义在做什么?我如何用 Python 编写它?

c++ - 重载后缀运算符++

c++ - 为什么不在 C++ 循环中使用 < 但 !=?

C++ - 为什么 std::function<some_type_t, void> 无效?

c++ - 从模板参数指向方法的指针

c++ - 线程作为成员变量

c++ - 优化openmp的依赖循环

c++ - 特化 std::vector 的模板

c++ - 解释这个 C++ 模板是如何工作的?

c++ - 如果 header 位于预编译 header xcode 中,则找不到默认模板参数