C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类
1.typedef
typedef一般是对某种类型的类型别名(不是变量别名)
typedef double db;void mixtypename()
{db d=1.2;cout<<d<<endl;
}
db就是double的别名,一般情况下,使用typedef一般可以认为是类型别名的替换
但是也有例外
typedef char * ps;
void mixtypenameexcept()
{char a='s';char b='a';const ps cstr=&a;cstr=&b;
}
当编译这段代码时,会报错
这说明cstr是const指针,而不是指向const变量的指针
也就是说
const ps cstr等价于char *const cstr
const ps cstr不等价于const char *cstr
2.static_cast
static_cast用来强迫隐式转换。那么经常出现的隐式转换有哪些?1、用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。2、指针或引用之间的转换,比如 void*转为float*,或者将base*转为derived*。3、将非const对象转为const对象。
void mixtypecast()
{double d=3.14;int i=static_cast<int>(d);void *vp=&i;int *pi=static_cast<int *>(vp);cout<<i<<endl<<*pi<<endl;
}
int i=10;
const double d=static_cast<double>(i);
base *pb=new base();
derive *pd=new derive();
base *pb2=static_cast<base*>(pd);
derive *pd2=static_cast<derive*>(pb);//not safe
base b;
base &rb=b;
derive &rd=static_cast<derive&>(rb);//not safe
上述代码中的L6、9发生了向下转化,是不安全的(因为编译期的类型转换有可能会在运行时出现错误,特别是类对象的指针或引用),所以就有了dynamic_cast,dynamic_cast见https://blog.csdn.net/Master_Cui/article/details/110520918
3.const_cast
const_cast通常被用来将对象的底层const属性。所以,const_cast一般用于const对象引用和const对象的指针,但是不能用于const对象
示例
void mixremoveconst()
{const int &a=10;int &b=const_cast<int &>(a);const int *pa=&a;int *p=const_cast<int *>(pa); cout<<p<<endl<<b<<endl;
}
示例2
const int cb=20;
int b=const_cast<int>(cb);
cb中的const是顶层const,所以不能用const_cast来强转,否则会出现如下错误(提示被转换的表达式不是指针也不是引用)
4.一次循环遍历二维数组
void twodimarray()
{int a[3][4]={1,2,3,4,5};for (int i=0;i<3*4;++i) {cout<<a[i/4][i%3]<<endl;}
}
行下表为数组元素索引除列数,列下表为数组元素索引对行求余
5.聚合类
聚合类的特点:1.所有成员都是public。2.没有定义任何构造函数,全有编译器自动生成。3.没有基类。4.没有类内初始化
可以使用列表初始化对聚合类进行初始化,成员初始化的顺序必须和成员的定义顺序一致
class agg
{
public:int a;string str;
};int main(int argc, char const *argv[])
{agg t={10,"qwe"};cout<<t.a<<t.str<<endl;return 0;
}
上述代码中的10和qwe的位置不能颠倒
参考:
《C++ Primer》
欢迎大家评论交流,作者水平有限,如有错误,欢迎指出
C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类相关推荐
- 二维数组更改vue_使用vue中的v-for遍历二维数组的方法
如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...
- 遍历二维数组_Java编程基础阶段笔记 day06 二维数组
二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...
- 微信小程序遍历二维数组
在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: {familys:[{familyName:'贾家', users: [{name:'贾宝玉'},{name:'贾元春' ...
- 如何创建二维数组 微信小程序_微信小程序遍历二维数组
在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: { familys:[ { familyName:'贾家', users: [ {name:'贾宝玉'}, {name: ...
- c语言二维数组行优先如何访问快,C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why?...
C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读) ...
- python中遍历二维数组_python遍历二维数组-女性时尚流行美容健康娱乐mv-ida网
女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 二 维 数组 5.2.1 二 ...
- 漫画:如何螺旋遍历二维数组?
作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 第二天 什么意思呢?我们来举个例子,给定下面这样一个二维数组: 我们需要从左上角的元素1开始,按照顺时针进行螺 ...
- c语言对用下标法二维数组遍历,二维数组遍历:下标法与指针法的较量
在图像的采集中,常常需要用到二维数组,这里数组的遍历是指按照一定的顺序访问数组中所有的元素. 在众多的遍历方法中,下标法和指针法是两种常用的方法.但在使用的时候,我们只需要选择其中的一种,那么如何选择 ...
- c++ 二维数组_C|数形结合理解数组指针、指针数组、一级指针来遍历二维数组
二维数组本质是也是线性存储的一维数组,各元素都是相对于基地址(首地址)的偏移,只是逻辑上的维度区分而已.或者可以理解为数组的数组,也就是说,n维数组的元素是一个n-1维数组. 需要注意的是,多维数组名 ...
最新文章
- 使用Html5+C#+微信 开发移动端游戏详细教程 总目录
- TensorFlow 官方文档中文版发布啦(持续维护)
- java----八种排序算法
- MySQL中in(常量列表)的执行计划
- Java15-day06【Set、HashSet、LinkedHashSet、TreeSet、Comparable、Comparator、泛型类、可变参数的使用】
- SSH登录太慢(等很久才提示输入密码)的问题
- 【插件介绍】Lombok
- LiteOS内核源码分析:消息队列Queue
- 为什么数据可视化很重要
- 人脸检测(十)--强分类器源码分析
- C语言实现数据结构——单链表
- 一页纸项目管理及模板下载
- 怎么调试Delphi源码
- cpda项目数据分析师与cda数据分析师的区别?不建议考CPDA
- Thinkpad R60 驱动下载及安装方法 for windows XP
- python opencv 获取图片清晰度
- 怎么在搜索计算机学报的论文,计算机学报-模式搜索法
- Android 出海 Admob 踩坑
- 【DNSPOD】利用DNSPod实现动态域名解析【DDNS】
- 网站服务器进不去可以加速进去吗,让网页打开加速的方法
热门文章
- JFinal整合Shiro(二)
- Block介绍(二)内存管理与其他特性
- 验证视图MAC失败 Validation of ViewState MAC Failed
- 零基础Java学习之包(Package)
- ZooKeeper配置中出现Error contacting service. It is probably not running
- AutoCAD安装失败怎样卸载重新安装AutoCAD,解决AutoCAD安装失败的方法总结
- flask第十篇——url_for【3】
- zk如何实现watch
- 机器学习基石(6)--Theory of Generalization
- 欺诈网站都注重用户体验!你,还在等什么?!