这个系列整理了一下学习c++的知识点,本篇简单提及一些基础的东西,涉及到一些具体的知识后面的篇章会细说。

1、基本类型取值范围

在c++中,int、long、double、short、float等的取值范围不是固定的,是与系统有关的,与Java不同。

2、引用参数:

在参数类型后面加&即可,如:
int &count
引用参数与原参数指向同一地址,是原参数的别名而已。与传值参数的区别:
int m = n;
int &m = n;
第一条是值参数,将n的值赋予m,m和n没有关系。
第二条是引用参数,将n的引用赋予m,m只是n的别名,当n或m值改变时另外一个也会跟着改变

3、防止“==”和“=”混淆

在c++中,如果“==”和“=”使用错误(如该使用“==”的地方使用了“=”),由于c++和Java不同,很多时候并不报错。比如在if判断语句中
if(n = 1)
并不会报错(在Java中就会报错),因为c++中任何非零值都当成true。
为了防止混淆,在“==”语句中一般将变量放在右边,如:
7==n
这样的话当写错成“7=n”的时候编辑器就会报错。

4、默认实参

默认实参:函数的某个参数不经常使用,可以给函数形参一个默认值,在调用该函数时可以忽略这个参数。
默认实参必须是函数参数列表最靠右边的参数。当调用具有多个默认实参的函数时,如果省略的实参不是形参列表中最靠右的参数,那么该实参右边的所有参数也必须被省略。如:
函数原型
int volume(int length = 1, int width = 1, int height = 1);
调用
volume()
volume(10)
volume(10, 8)
volume(10, 8, 2)
都是可以的。

5、一元作用域和二元作用域

作用域运算符(::)
当局部变量和全局变量有相同名字时,用一元作用域分辨运算符来区分。
在局部变量的作用域中,直接使用变量则使用的是局部变量,而加上(::)来使用变量则使用的是全局变量,如:
int number = 10;
void get(){int number = 1;number = 2;         //这时是给局部变量number赋值::number = 3;       //这时是给全局变量number赋值
}

当局部变量和类作用域变量有相同名字时,用二元作用域分辨运算符来区分。

与上面类似,加上(类型::)来使用变量是类作用域变量。
注意区分类作用域变量和全局变量,全局变量不在类内部。

6、重载与默认参数

当函数有默认参数时,重载时要格外注意,防止出现二义性。如:
函数原型
int volume(int length = 1, int width = 1, int height = 1);
重载函数
int volume(int length, int width)
这样的话当调用volume(2, 3)时编译器就不知道选择哪个函数。

7、函数模板

所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。
凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需要在模板中定义一次即可。在调用函数时,系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。
类似java中的泛型。详细见:C++中函数模板的用法详细解析_There is a Bug!!!-CSDN博客
定义函数模板的一般形式为:template <typename T>或者template <class T>
例如:
template<typename T>
T n_add(T a,T b){}
可以替代:
int n_add(int a,int b)
double n_add(double a,double b)
等函数,不必重复定义这么多函数了。

8、求值顺序

c++中没有指定大多数运算符其操作数的求值顺序。只明确指定了“&&”、“||”、“,”、“?:”这四种运算符的操作数的求值顺序。
所以不能直接认为操作数的顺序是从左向右的,不同的编译器可能顺序不同。
如:
int c;
int a(){return c + 2;
}
int b(){return c++;
}
a() + b();

不能直接认为a()一定在b()前运算,所以在做改变了操作数中自身值得运算一定要格外小心。

9、常量的声明和赋值

使用const限定符声明一个常量变量,常量变量必须在声明时用一个常量表达式来初始化,而且之后不能修改。
声明常量是没有赋值,是一个编译错误。
在可执行语句中给常量变量赋值也是一个编译错误。

10、setfill

填充指定字符,是粘性的。所以一条语句中setfill后面的都会进行填充。
注意:因为是粘性的,所以setfill之后如果不再需要填充一定要恢复。

11、拷贝构造函数

必须以引用的形式接收参数,而非值,否则会无穷递归。
因为如果是值的形式,在调用拷贝构造函数时,会传一份拷贝,这样又调用了拷贝函数,产生了无限递归。

12、虚悬指针

如果两个对象都指向同一内存,一个对象回收时析构函数会删除这块内存的分配。另外一个对象就变成了虚悬指针,会引起运行错误。

13、函数返回局部变量

返回局部变量引用或指针是常见的错误,因为局部变量在函数完成就回收了。

c++学习笔记之基础篇相关推荐

  1. jqGrid 学习笔记整理——基础篇

    jqGrid 学习笔记整理--基础篇 jqGrid 实例中文版网址:http://blog.mn886.net/jqGrid/ 国外官网:http://www.trirand.com/blog/ 本人 ...

  2. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  3. Excel学习笔记之基础篇

    记录一下跟着网易云课堂大饼老师Excel课程学习的笔记,只能起一个大纲的作用吧,用来练习的数据表不方便上传,也懒得截图录屏做成GIF操作啥的.课程共分为基础篇,进阶篇之函数,进阶篇之数据透视,进阶篇之 ...

  4. golang学习笔记(基础篇)

    LCY~~Golang学习笔记 一.Go语言开发环境 ##安装Go开发包以及VsCode Go开发包与vscode配置安装教程网址:https://www.liwenzhou.com/posts/Go ...

  5. threejs 物体根据相机位置显示_Threejs学习笔记(一) 基础篇

    基本概念 此学习笔记主要记录使用threejs的制作http://sqace.163.com网站中用到的API和相关知识点. 一个完整的3D环境包含以下元素: 1.场景(Scene):是物体.光源等元 ...

  6. 【ESP32最全学习笔记(基础篇)——1.ESP32简介】

      ESP32 新手?从这里开始! 关于本教程: ESP32 基础篇                                 1.ESP32简介 ☑ 2.ESP32 Arduino 集成开发环 ...

  7. 唐金州的Vue开发实战学习笔记(基础篇)

    Vue开发实战学习笔记 简易的Vue程序 组件 事件 插槽 单文件组件 双向绑定 虚拟DOM与key属性 组件更新 状态data与属性props vue的响应式更新 计算属性和侦听器 计算属性 com ...

  8. MySQL学习笔记(基础篇未完待补充)

    一.MySQL数据库基 目录 一.MySQL数据库基础篇 1.数据库概述与MySQL安装篇 第1章:数据库概述 1.为什么要使用数据库 2. 数据库与数据库管理系统 2.2 数据库与数据库管理系统的关 ...

  9. Win32汇编学习笔记之基础篇

    基础篇 第一章 背景知识 1.1 Win32的软硬件平台 1.1.1    80x86系列处理器简史 Win32可以在多种硬件平台上运行,但使用最广泛的硬件平台是基于Intel公司80x86系列处理器 ...

  10. 【ESP32最全学习笔记(基础篇)——5.ESP32 数字输入和数字输出(Arduino IDE)】

    关于本教程: ESP32 基础篇 1.ESP32简介 2.ESP32 Arduino 集成开发环境 3.VS 代码和 PlatformIO 4.ESP32 引脚 5.ESP32 输入输出 ☑ 6.ES ...

最新文章

  1. ora-01653表空间扩展失败产生的场景和处理方法
  2. puppet 自定义facter
  3. 对不队—— Alpha冲刺
  4. python【力扣LeetCode算法题库】面试题59 - II- 队列的最大值
  5. python编程需要什么软件-python编程用哪个软件
  6. Nginx中worker connections问题的解决方法
  7. Android应用程序签名详解
  8. Bailian2697 迭代法解方程【二分+迭代】
  9. 3种时间复杂度实现不同类型的无序数组去重
  10. Android之monkey Test
  11. 解锁网易云音乐客户端变灰歌曲的详细教程
  12. JavaScript动态创建DOM(七)
  13. PHP中将Word文件转换为PDF
  14. 台式计算机总是重启,台式电脑总是自动重启,查不出问题!
  15. proof-carrying data from accumulation schemes学习笔记
  16. springboot中使用thymeleaf片段引入出现500错误(易错)
  17. Redmi K20 Pro 编译 PixelExperience
  18. 计算机专业白色简历封面,计算机专业个人简历封面模板图
  19. java面试一般提问的问题,详细说明
  20. python 黑白棋_python实现翻转棋游戏(othello)

热门文章

  1. Python学习 Part6:错误和异常
  2. 关闭 Windows Server 2008 用户权限控制(UAC)
  3. sql server 作业收缩数据库
  4. BZOJ 1103 大都市MEG
  5. SQL Server表分区【转】
  6. 2018年中国C++大会详细日程+报名
  7. Vue父子组件之间的传值
  8. 母校/母语/母公司怎么说?
  9. 搜狗词库爬虫(2):基础爬虫框架的运行流程
  10. override覆盖