`

【原创】c++学习笔记四

    博客分类:
  • c++
 
阅读更多
表达式
C++ 还支持操作符重载,允许程序员自定义用于类类型时操作符的含义。
0 假 非0 真
对于位操作符,由于系统不能确保如何处理其操作数的符号位,所以强烈建议使用 unsigned 整型操作数。

j=++i:先把i加1,再赋值给j
j=i++:先把i給j,再i加1

由于后自增操作的优先级高于解引用操作,因此 *iter++ 等效于*(iter++)。
C++ 语言为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->)。
假设有一个指向类类型对象的指针(或迭代器),下面的表达式相互等价:
(*p).foo; // dereference p to get an object and fetch its member named
foo
p->foo;// equivalent way to fetch the foo from the object to which p points

sizeof 操作符的作用是返回一个对象或类型名的长度,返回值的类型为size_t

使用 sizeof 的结果部分地依赖所涉及的类型:
对 char 类型或值为 char 类型的表达式做 sizeof 操作保证得 1。
对引用类型做 sizeof 操作将返回存放此引用类型对象所需的内在空间
大小。
对指针做 sizeof 操作将返回存放指针所需的内在大小;注意,如果要获
取该指针所指向对象的大小,则必须对指针进行引用。
对数组做 sizeof 操作等效于将对其元素类型做 sizeof 操作的结果乘
上数组元素的个数。

其实,以什么次序求解操作数通常没有多大关系。只有当操作
符的两个操作数涉及到同一个对象,并改变其值时,操作数的
计算次序才会影响结果。

一个表达式里,不要在两个或更多的子表达式中对同一对象做
自增或自减操作。

new 和 delete 表达式
定义变量时,必须指定其数据类型和名字。而动态创建对象时,只需指定其
数据类型,而不必为该对象命名。取而代之的是,new 表达式返回指向新创建对
象的指针,我们通过该指针来访问此对象
int i;
int *pi = new int;
// named, uninitialized int variable
// pi points to dynamically allocated,
// unnamed, uninitialized int
值初始化的 () 语法必须置于类型名后面,而不是变量后
动态创建的对象用完后,程序员必须显式地将该对象占用的内存返回给自由
存储区。C++ 提供了 delete 表达式释放指针所指向的地址空间。
如果指针指向不是用 new 分配的内存地址,则在该指针上使用delete 是不合法的。
删除指针后,该指针变成悬垂指针。
悬垂指针指向曾经存放对象的内存,但
该对象已经不再存在了。悬垂指针往往导致程序错误,而且很难检测出来。
一旦删除了指针所指向的对象,立即将指针置为 0,这
样就非常清楚地表明指针不再指向任何对象。
内置类型对象或未提供默认构造函数的类类
型对象必须显式初始化。
C++ 定义了算术类型之间的内置转换以尽可能防止精度损失.
对于包含 signed 和 unsigned int 型的表达式,其转换可能出乎我们的意
料。表达式中的 signed 型数值会被转换为 unsigned 型。
在使用数组时,大多数情况下数组都会自动转换为指向第一个元素的指针
不将数组转换为指针的例外情况有:数组用作取地址(&)操作符的操作数
或 sizeof 操作符的操作数时,或用数组对数组的引用进行初始化时,不会将数
组转换为指针。
C++ 还提供了另外两种指针转换:指向任意数据类型的指针都可转换为
void* 类型;整型数值常量 0 可转换为任意指针类型。
当使用非 const 对象初始化 const 对象的引用时,系统将非 const 对象
转换为 const 对象。
显式转换也称为强制类型转换(cast),包括以下列名字命名的强制类型转换操
作符:static_cast、dynamic_cast、const_cast 和 reinterpret_cast。
dynamic_cast 支持运行时识别指针或引用所指向的对象。
const_cast 将转换掉表达式的 const 性质。
编译器隐式执行的任何类型转换都可以由 static_cast 显式完成
当需要将一个较大的算术类型赋值给较小的类型时,使用强制转换非常有
用。
reinterpret_cast 通常为操作数的位模式提供较低层次的重新解释。






分享到:
评论

相关推荐

    C++学习笔记【原创】

    【C++学习笔记【原创】】是一份作者个人长期积累的C++学习心得与经验总结,旨在为初学者提供一个参考的学习路径。这份笔记涵盖了C++的基础知识、编程技巧以及函数语法等多个方面,帮助读者逐步掌握这门强大的编程...

    《C++ Templates 中文版》笔记

    这份笔记结合了书本内容的摘录和作者个人的理解,其中包含了7章原创内容以及14章从CSDN网站上整理摘抄的部分,这些章节可能有所重叠,但无疑为学习者提供了丰富的资源。 C++模板是C++语言中的一个强大工具,它允许...

    C++菜鸟总结

    了解函数的声明、定义、参数传递以及如何返回值是学习C++的关键步骤。 3. **数组与指针**:数组是一组相同类型的数据集合,而指针是存储内存地址的变量。理解指针的概念,掌握指针运算和动态内存分配(如malloc, ...

    iOS开发教程(大神原创笔记)

    ### iOS开发教程(大神原创笔记)核心知识点详解 #### 一、Unix相关知识点 **1. Unix指令:** - **pwd**:用于显示当前所在目录的位置。 - **ls**:列出当前目录下的所有文件及文件夹。 - **ls –l**:以详细...

    MongoDB学习笔记(一) MongoDB介绍与安装方法

     最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都要去查阅英文网站,效率比较低下。本人不才,借着自学的机会把心得体会都记录下来,方便感兴趣的童鞋分享讨论。部分资源出自...

    PAT甲级所有代码.7z

    4. **算法笔记**:这些代码可能包含了各种算法的实现,如排序算法(冒泡排序、快速排序、归并排序等)、搜索算法(二分查找、深度优先搜索、广度优先搜索等)、动态规划、贪心策略等,这些都是解题的关键。...

    LearningNotes:Java学习笔记,主要来源于B站上视频的学习,同时会记录平时一些学习和项目中遇到的问题,同步更新在蘑菇博客,如果对我的博客网站感兴趣的话,欢迎关注我的 蘑菇博客项目 笔记主要涵盖:Java,Spring,SpringCloud,计算机网络,操作系统,数据结构,Vue等 如果笔记对您有帮助的话,欢迎star支持,谢谢~

    陌溪的学习笔记 关于我 陌溪 是一个从三本院校一路摸滚翻爬上来的程序员。目前就职于 字节跳动的Data广告部门,是字节跳动全线产品的商业变现研发团队。这两天创建了一个 微信公众号【陌溪教你学编程】,未来将会在...

    原创记事本

    总的来说,这个压缩包提供了一个完整的、原创的记事本项目的实例,对于想要学习编程尤其是文本编辑器开发的初学者来说,是一个宝贵的资源。通过这个项目,你可以了解到软件的基本架构、文件处理、用户界面设计等多个...

    leetcode合法表达式-CPP_Practice:本仓库是面向C/C++技术方向的基础知识总结,包括语言、程序库、数据结构、算法、系统、网

    由于本人水平有限,仓库中的知识点有来自本人原创、读书笔记、书籍、博文等,非原创均已标明出处,如有遗漏,请 向issue 提出。此仓库引用于issue! 只面向初学者用于学习参考~ :bookmark_tabs: 目录 :plus: C/C++ ...

    iOS开发教程(大神笔记)

    描述:"大神原创的iOS开发教程,内容全面,覆盖OC及iOS开发全部技术细节内容,值得认真学习" 标签:"iOS 移动开发 Objective-C iOS开发 教程" 部分内容: 1. iOS开发基础介绍:开发者拥有丰富的Android、iOS、PHP和...

    UBB-Mathematics-and-Computer-Science

    4. **教程**:逐步指导如何使用C++解决问题,涵盖数据结构、算法、面向对象编程等方面。 5. **测试与评估**:包含练习题、习题集和可能的期末考试题目,用于检验学习成果。 6. **参考文献**:列出相关书籍、论文和...

    程序设计大赛策划方案.pdf

    - 学生按成绩排名,前70名晋级,同时设有奖励机制,包括个人操行成绩加分和实物奖励(如笔记本),并激励班级参与,以提升整体学习氛围。 2. **代码书写阶段**: - 晋级的学生可自由组队参赛,每队1至3人,可以...

    SharpGLWPFApplication1.zip

    因此我在做三维姿态上位机过程中,又学习了一下SharpGL,当然很感谢官方的源码例程,基本所有的操作都是跟着官方例程来的。在这里分享一下: ———————————————— 版权声明:本文为CSDN博主「川北97...

    自己开发的俄罗斯方块

    标题 "自己开发的俄罗斯方块" 暗示了这是一个由个人或小团队独立完成的电子游戏项目,其中主要的编程语言可能是C++、Python、Java等,因为这些语言广泛用于游戏开发。俄罗斯方块是一款经典的休闲游戏,其基本原理是...

    算法设计与分析.pdf

    4. **深度优先搜索和广度优先搜索**:这两种搜索算法是图遍历的基本工具。深度优先搜索优先探索尽可能深的节点分支,而广度优先搜索则按层次顺序遍历图。这部分内容包括这些算法的具体实现和应用场景。 5. **最短...

    蓝桥杯试题及参考答案欢迎使用

    它分为多个级别,如初级、中级和高级,涵盖C/C++、Java、Python等编程语言,以及数据结构、算法分析等多个IT领域的知识。试题通常会包括选择题、填空题和编程题,涉及的内容广泛且深入。 "蓝桥杯试题及参考答案欢迎...

    USTC课程:中国科学技术大学课程资源

    中国科学技术大学课程资源本仓库收录中国科学技术大学众多课程资源的笔记,总结,经验等学生原创内容目录索引版权说明本仓库分享资料遵守其创作者之规定,由同学自愿投稿,仅接收学生原创的或获得授权的资源。...

    程序设计大赛策划方案.docx

    - **营造良好氛围**:构建一个有利于学习和研究的良好环境,提高教学质量。 #### 二、大赛流程 1. **资格赛阶段** - **时间**:待定。 - **形式**:笔试,包含客观题。 - **参赛资格**:面向全体在校生,可以...

Global site tag (gtag.js) - Google Analytics