【C++基础学习】引起类模板被实例化情形总结

2023-11-12

在我们使用类模板时,只有当代码中使用了类模板的一个实例的名字,而且上下文环境要求必须存在类的定义时,这个类模板才被实例化。并不是每次使用一个类都要求知道该类的定义。

(1)声明一个类模板的指针和引用,不会引起类模板的实例化,因为没有必要知道该类的定义。例如:

class Matrix;
Matrix *pm;//不需要类的定义

void inverse(Matrix &);//也不需要类的定义
以及

void foo(Queue<int> &qi)
{
	Queue<int> *pqi = &qi;
	//...
}

但是如果检查这个指针或引用所值的那个对象时,类模板才会被实例化。比如在上例中,如果指针pqi被解引用,qi被用来获得它所指向的对象值,或者pqi或qi被用来访问Queue<int>的数据成员或成员函数时,Queue<int>才会被实例化。

void foo(Queue<int> &qi)
{
	Queue<int> *pqi = &qi;

	//因为成员函数被调用,所以Queue<int>被实例化
	pqi ->add(255);
	//...
}


(2)定义一个类类型的对象时需要该类的定义,因此类模板会被实例化、例如:

class Matrix;
Matrix obj1;//Error

class Matrix{...};
Matrix obj1;//OK
下面的例子中,对象qi的定义引起类模板Queue<int>被实例化:

Queue<int> qi;

(3)在使用sizeof()时,它是计算对象的大小,编译器必须根据类型将其实例化出来,所以类模板被实例化:

int iobj = sizeof(Stack<string>);


(4)new表达式要求类模板被实例化。

Queue<int> *p_qi = new Queue<int>;


(5)引用类模板的成员会导致类模板被编译器实例化。


(6)需要注意的是,类模板的成员函数本身也是一个模板。标准C++要求这样的成员函数只有在被调用或者取地址的时候,才被实例化。(在标准C++之前有些编译器在实例化类模板时,就实例化类模板的成员函数。)用来实例化成员函数的类型,就是其成员函数要调用的那个类对象的类型。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++基础学习】引起类模板被实例化情形总结 的相关文章

  • 在静态断言和运行时错误之间自动选择

    我有一个执行除法并检查对齐的宏 define BYTES TO WORDS x CHECK ALIGNMENT x 2 x 2 我想实施CHECK ALIGNMENT作为一个总是返回 1 的宏 并且如果满足以下条件则触发错误x不除以 2 宏
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 使用inotify监控文件

    我正在使用 inotify 来监视本地文件 例如使用 root temp inotify add watch fd root temp mask 删除该文件后 程序将被阻止read fd buf bufSize 功能 即使我创建一个新的 r
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • 堆栈独立的C/C++蓝牙API?

    我想知道是否有适用于 Windows XP Vista 7 x86 和 x64 的堆栈独立 C C 蓝牙 api 我的目标是创建连接并通过蓝牙发送 接收一些时间关键的数据 我的研究给了我以下选择以及这项任务的缺点 用于蓝牙的 Windows
  • 使用 std::string 导致 Windows“找不到入口点”[重复]

    这个问题在这里已经有答案了 当我用 G C C 编译它时 include
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • MSBuild 将动态生成的文件复制为项目依赖项的一部分

    我有一个自定义 msbuild 任务 它正在生成一些输出文件到 ProjectA 的输出目录 TargetDir 当前的代码是这样的
  • 如何检查是否发生溢出? [复制]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 当应用程序未聚焦时监听按键

    我有一个应用程序 C 4 0 WPF 它是隐藏的 可以通过单击系统托盘图标或我创建的其他框架 停靠在左侧和最上面的小框架 来显示 My customer wants to add a new way to display the appli
  • C++ 静态工厂构造函数

    我正在进行模拟 它需要创建多个相当相似的模型 我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型 例如 模型 createTriangle or 模型 createFromFile 我从以前的 java 代码中汲取了这个想法
  • “sizeof”对不完整类型列表结构 C 的无效应用

    我正在尝试实现一种处理页面错误的替换算法 因此 我尝试使用 malloc 创建一个循环链表 但出现以下错误 无效的应用程序sizeof to incomplete typepageInMemory 以下是代码 typedef struct
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • g++4.9 不支持 std::align

    在学习对齐问题等时 我意识到我的 g 4 9 macports OS X 实现不支持std align 如果我尝试编译 使用 std c 11 此示例代码来自http www cplusplus com reference memory a
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • TypeScript 中 C# 类虚拟成员的等效项

    因此 在 C 中 当我创建模型类和延迟加载内容时 我会执行以下操作 public int User ID get set public int Dept ID get set 然后在我的班级稍远一点的地方 我像这样弹出我的虚拟 public
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http

随机推荐

  • 灵感爆发:An/flash 影片剪辑动画播放一遍后,摆脱paly()的控制

    有一个影片剪辑我只想让他播放一次就停下来 但是我的播放按钮 就一个命令 this play 现在有个矛盾 播放按钮和暂停按钮都在 暂停在影片剪辑动画的中间还好 但是不小心暂停在最后一帧 在播放就会从头 播放按钮只有一个功能就是从当前帧继续播
  • MySQL高阶语句(三)

    一 NULL值 在 SQL 语句使用过程中 经常会碰到 NULL 这几个字符 通常使用 NULL 来表示缺失 的值 也就是在表中该字段是没有值的 如果在创建表时 限制某些字段不为空 则可以使用 NOT NULL 关键字 不使用则默认可以为空
  • Webpack 4.X 配置cdn加载资源

    众所周知 SPA单页应用 首次访问需要加载近全部资源 从而导致首页渲染速度很慢 继而 出现很多性能优化方案 图片 资源懒加载 减少http请求 减小请求资源大小 减少dom操作避免触发回流重绘 gzip压缩 cdn加载等等 今天 我们就具体
  • 使用OpenSSL搭建CA

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 SSL TLS 1 机密性 数据加密 对称加密 2 完整性 保证数据不会被篡改 或是因为数据传输丢失 单向加密 提高特征码 附加到数据后 3 可靠性 二 概述 如何实现
  • ubuntu 18.04 校园网连接问题:MAC物理地址不匹配。

    ifconfig belong to net tools net tools have been removed in Ubuntu 18 04 so we need to install net tools by hand Notice
  • Stable Diffusion实现AI绘画,尝试向实际业务迈进...

    前置 由于处于学习初期 懂得较少以及可能会出现理解错误等情况 故而文章仅供参考学习使用 旨在分享知识 共同学习 不能作为依据 如有错误 感谢指出 文章主题分为两部分 学习部分也就理论知识 实践部分主要包括问题及解决方案 一 Stable D
  • less-loader 报错

    当vue页面中初次使用了 lang less 通常会报错 信息比如 Module not found Error Can t resolve xxxxxxxx node modules less loader dist cjs js 此时需
  • 多元线性回归模型可视化

    绘制平面图 绘制 房价 与 房价面积 及 房间数量 之间关系的散点图 import numpy as np import matplotlib pyplot as plt from mpl toolkits mplot3d import A
  • 通俗理解数字签名,数字证书和https

    前言 最近在开发关于PDF合同文档电子签章的功能 大概意思就是在一份PDF合同上签名 盖章 使其具有法律效应 签章有法律效应必须满足两个条件 能够证明签名 盖章者是谁 无法抵赖 PDF合同在签章后不能被更改 在纸质合同中 由于签名字迹的不可
  • 【渗透测试笔记】之【内网渗透——CS流量隐蔽】

    文章目录 1 修改端口特征 2 修改证书特征 2 配置CDN 3 生成自定义配置文件 4 效果演示 1 修改端口特征 vim teamserver 将默认端口修改 Dcobaltstrike server port 54321 2 修改证书
  • C++入门——命名空间

    文章目录 前言 命名空间的定义 命名空间的使用 前言 在c c 中 会有变量 函数以及后面的类 这些名称都要存在于局部的 可能会有冲突 所以使用命名空间的意义就是 对标识符的名称进行本地化 以避免命名冲突或者名字的污染 namespace关
  • WSL 2 网络配置

    文章目录 WSL 2 访问局域网内设备 WSL 2 访问本机 Windows WSL 2 访问非本机 Windows 设备 局域网内设备访问 WSL 2 本机 Windows 访问 WSL 2 非本机 Windows 设备访问 WSL 2
  • 支持向量机matlab代码程序_多核支持向量机原理及实现

    了解非线性支持向量机模型后 应该对支持向量机的原理与核技巧都有掌握 本文在传统非线性支持向量机基础上向大家介绍多核支持向量机 这里就不对支持向量机原理与核函数花费太多笔墨了 主要介绍将单核支持向量机转换为多核支持向量机的思想 原理介绍完之后
  • Some collections were archived because you’ve reached the shared requests limits.错误解决

    今天打开我的postman 发现我的一个collection不见了 左下角出现一个提示 Some collections were archived because you ve reached the shared requests li
  • win11安装WSA(安卓子系统)教程

    1 更新到最新版win11 截止2021年10月23日 最新版本号是22000 282 2 启用Windows沙盒和Windows虚拟机监控程序平台 控制面板打开程序与功能 启用或关闭Windows功能 找到这两个选项 打钩确定 等待安装
  • 机器学习实战第十四章-利用SVD简化数据

    一 什么是SVD SVD Singular Value Decomposition 奇异值分解 基本知识如下图所示 其中U和V都可以作为高维转低维的转换矩阵将原始高维冗余数据转换到一个低维无冗余语义空间中 从而实现数据的降维 SVD的应用
  • fastjson总结

    fastjson 版本 1 2 36 主要 API 序列化 API String JSON toJSONString Object 将对象序列化为 json 字符串 反序列化 API T JSON parseObject String st
  • 记一次mybatis-plus遇到的问题

    在用了 springboot 和 mybatis plus很久之后 有一天突然看到配置文件有点繁杂 想将相同的配置拉到application yml里 就在将配置拉过去后 问题就开始出现了 在调用 baseMapper method 的时候
  • 【杰发科技AC7802x测评】4,RTC串口输出

    起初我认为AC7802X的实时实钟会很难 我想留着以后再评吧 可是今天看了RTC说明突然开了悟了 原来RTC只是个计数器 我打开例程并没有发现RTC时钟的例程 到是有个秒中断例程 那也不要紧我把它的功能补全吧 typedef struct
  • 【C++基础学习】引起类模板被实例化情形总结

    在我们使用类模板时 只有当代码中使用了类模板的一个实例的名字 而且上下文环境要求必须存在类的定义时 这个类模板才被实例化 并不是每次使用一个类都要求知道该类的定义 1 声明一个类模板的指针和引用 不会引起类模板的实例化 因为没有必要知道该类