c++中别名的定义 using、#define、typedef、typename、namespace的使用

2023-11-14

typedef typename #define namespace using区别

1.关键字typedef定义别名

//例1:定义变量别名
typedef unsigned int  size_t; //size_t是unsigned int的别名
size_t i=2; //等价于 unsigned int i=2;
//例2:定义结构别名
typedef struct SA
{

}Sa,*Spa; //C结构写法,SA结构的一个指针对象别名Spa,和一个对象别名Sa
Sa s;
Spa* sp;

2.typename

  1. 用于模板声明
template<typename T>
class S{};
  1. 用于模板类嵌套从属命名时,强调这是一个类型
//例1:
template<typename C>
void f(const C& container, typename C::iterator iter);
//例2:
template<typename C>
class S
{
    typename C::iterator iter1;//声明一个 C::iterator 的成员 iter1
    using iter2=typename C::iterator; 定义别名 iter2 ,类型是C::iterator
};

3.文本替换宏define

#define PI 3.1415926 //用PI代替3.1415926
double db = PI; //db=3.1415926

4.using

  1. 用于命名空间
//例1:
using namespace std;//命名空间std内的成员可以直接使用
cout <<"Hello World!";//true
int i;
cin >> i;//true
//例2:
using namespace std::cout;//可以直接使用命名空间std内的cout成员
cout <<"Hello World!";//true
int i;
cin >> i;//error
std::cin >> i;//true
  1. 用于类成员
    1. 用于将基类成员引入到派生类的定义中,例如将基类的受保护成员暴露为派生类的公开成员
    2. 用于继承构造函数
struct B {
	B(){ std::cout << "B构造\n"; }
protected:
	void g(char) { std::cout << "B::g\n"; }
	int m; // B::m 为受保护
};

struct D : B {
	using B::m; // D::m 为公开
	using B::g; // D::g(char)变成公开
	void g(int) { std::cout << "D::g\n"; } // g(int) 与 g(char) 均作为 D 成员可见
	using B::B;//继承B的构造
};
int main(int argc, char* argv[])
{
	
	D d;// print: B构造 【d调用基类B的构造】
	d.m; //【类外可访问,m从基类的保护变公有】
	d.g(1); //print: D::g 
	d.g('c');//print: B::g
}

  1. 用于类型别名与别名模板声明
	template<typename T>
	using myVec=vector<T>;
	myVec<int> vec;

5.namespace 使用在命名空间上

语法:

  • namespace 别名 = 命名空间名; (1)
  • namespace 别名 = ::命名空间名; (2)
  • namespace 别名 = 嵌套名::命名空间名; (3)
namespace Q {
	namespace V { // V 是 Q 的成员,且完全在 Q 内定义
  // namespace Q::V { // C++17 中对上述二行的替代写法
		class C { void m(); }; // C 是 V 的成员且完全定义于 V 内
							   // C::m 仅声明
		void f(); // f 是 V 的成员,但只在此声明
	}
	void V::f() // V 的成员 f 的 V 外定义
				// f 的外围命名空间仍是全局命名空间、Q 与 Q::V
	{
		extern void h(); // 这声明 ::Q::V::h
	}
	void V::C::m() // V::C::m 的命名空间(及类)外定义
				   // 外围命名空间是全局命名空间、Q 与 Q::V
	{
	}
}

int main(int argc, char* argv[])
{
	namespace nm1 = ::Q::V;
	namespace nm2 = Q::V;
	namespace nm3 = Q;
}

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

c++中别名的定义 using、#define、typedef、typename、namespace的使用 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐

  • CCNP-冗余链路中的广播风暴、多帧复制、地址表的不稳定

    STP协议 当网络中存在备份链路时 只允许主链路激活 如果主链路因故障而断开后 备用链路才会被打开 广播风暴 在没有避免交换环路措施的情况下 每个交换机都无穷无尽的转发广播帧 广播流量破坏了正常的通信流 消耗了带宽和交换机的CPU资源 直至
  • python一行输出多个空格_python 在同一行依次输入三个值a,b,c,用空格分开,输出 b*b-4*a*c的值...

    拒绝回答一系列代码细节 自行百度学习对应函数 import re import math print Input four numbers seperated by scape enter for ending input myinputs
  • 如何优化算法提高卷积神经网络的泛化能力

    卷积网络的优化方式 方法 说明 使用更多数据 在有条件的前提下 尽可能多地获取训练数据是最理想的方法 更多的数据可以让模型得到充分的学习 也更容易提高泛化能力 使用更大批次 在相同迭代次数和学习率的条件下 每批次采用更多的数据将有助于模型更
  • ZYNQ 7000的硬件SPI控制器配置为三线制SPI

    使用zynq去做一些AD DA的操作时候有些只支持三线制的SPI那么我们如何使用PS端的控制器EMIO到PL端实现3线制呢 以上是SPI0的接口信号 我们可以把PL侧的三线制的SDIO信号 inout 通过一个IOBUF原语进行转换出in
  • 数字电路的逻辑符号

  • Mybatis框架之解决列名(表中的字段名称)和实体类中的属性名不一致

    查询数据的时候 查不到userName的信息 原因 数据库的字段名是user name 而POJO中的属性名字是userName 两端不一致 造成mybatis无法填充对应的字段信息 修改方法 在sql语句中使用别名 解决方案1 在sql语
  • 深入理解CRITICAL_SECTION

    http www cnblogs com dirichlet archive 2011 03 16 1986251 html 摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制 这一主题并没有引起太多关注 因而人们未能对其深刻理解
  • Hive其他优化

    一 关联优化器 在Hive的一些复杂关联查询中 可能同时还包含有group by等能够触发shuffle的操作 有些时候shuffle操作是可以共享的 通过关联优化器选项 可以尽量减少复杂查询中的shuffle 从而提升性能 set hiv
  • GPU显存问题-解决Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

    GPU显存问题 使用服务器跑深度学习代码时出现了这样的问题 Failed to get convolution algorithm This is probably because cuDNN failed to initialize so
  • Docker私有仓库搭建与界面化管理

    一 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方 我们可以在上面找到我们想要的镜像 也可以把我们自己的镜像推送上去 但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像 这个可以通过
  • 动态定义数组

    首先 为什么需要动态定义数组呢 这是因为 很多情况下 在预编译过程阶段 数组的长度是不能预先知道的 必须在程序运行时动态的给出 但是问题是 c 要求定义数组时 必须明确给定数组的大小 要不然编译通不过 如 int Array 5 正确 in
  • android频响曲线图,EQ 频响曲线

    import android annotation SuppressLint import android content Context import android graphics Canvas import android grap
  • 利用matplotlib绘制折线图:CSV格式

    熬过初学阶段的不适和挫败感 我们其实完全可以掌握一个全新的领域 本文为 python编程 从入门到实践 以下简称参考书 中第16章 下载数据中的内容 利用matplotlib绘制最高及最低气温折线图 在此整理为笔记 一为温习 二为备份 以便
  • 深度优先搜索详解 C++实现

    DFS 全文大概四千字左右 如果您初学DFS相信会对您会有很大的帮助 能力有限 很多术语不够专业 理解万岁 二叉树的深度优先搜索 二叉树的概念这里就不细谈了 使用数组来存储二叉树 根结点从1开始 方便计算 设父节点的下标为n 那么左儿子的下
  • RabbitMQ的消息应答、重新入队、持久化

    思考 假如我们的消费者正在处理一个任务 这个任务处理的过程中 突然这个消费者宕机了 导致这个任务没有完成 然而RabbitMQ队列却把这个任务从队列中删除了 那么这个任务就丢失了 改如何解决 消息应答 为了保证消息在发送过程中不丢失 rab
  • 【疑难】以指针赋值,形成数组形式

    include
  • Python项目开发:Flask基于Python的天气数据可视化平台

    目录 步骤一 数据获取 步骤二 设置Flask应用程序 步骤三 处理用户输入和数据可视化 步骤四 渲染HTML模板 总结 在这个数字化时代 数据可视化已经成为我们理解和解释信息的重要手段 在这个项目中 我们将使用Python语言来开发一个基
  • Anaconda的下载步骤

    输入网站 https www anaconda com 进去之后 点击 get started 然后点击如下图所示的 Install Anaconda Individual Edition 然后点击 Download 选择Windows下面
  • AI图片生成Stable Diffusion环境搭建与运行

    Stable Diffusion是一种基于扩散过程的生成模型 由Ge et al 在2021年提出 该模型利用了随机变量的稳定分布 通过递归地应用扩散过程来生成高质量的图像 与其他生成模型相比 Stable Diffusion在生成高质量的
  • c++中别名的定义 using、#define、typedef、typename、namespace的使用

    typedef typename define namespace using区别 1 关键字typedef定义别名 2 typename 3 文本替换宏define 4 using 5 namespace 使用在命名空间上 1 关键字ty