c++ primer复习(二)
1 悬垂else来自于else语句搭配的if语句的二义性
2 理解switch代码:
switch(c)
{
case 'a':
a++;
case 'b':
b++;
default:
x++;
}
如果为'a',则a++,b++,x++都会被执行
如果为'b',则b++,x++都会被执行
如果都不是,则只执行x++
由此可以推测出switch语句中break的作用,以及没有break时,语句的执行情况:第一个满足的case一直执行到break或switch结束,之后所有的case都被忽略,退出之前所有的语句都会被执行
3 switch结构内定义的变量,只能在最后一个case标号或default标号后面定义,防止代码出现跳过变量的定义和初始化的情况
因为定义过的变量可以被之后的代码使用,但是switch结构中,可能会跳过定义直接到达变量使用的代码处
如果某个case需要定义变量,最好使用{},防止之后的case继续使用该变量
4 *p1++ = *p2++
后自增操作符优先级高于*操作符,所以自增的是指针,不是指针指向的对象,但是解引用是从第一个元素开始,即对于p1和p2,其值已经实现自增,但是对于表达式*,还是p1和p2自增之前的值
不能按照p1和p2自增,然后对其自增后的值解引用,因为p1++的返回值是自增前的p1,虽然p1本身是自增的
5 goto语句不能跨越变量的定义向前跳转
6 函数相关
函数调用:用对应实参初始化函数形参,将控制权转交给被调用函数,主调函数被挂起,被调函数开始执行,被调函数的运行以形参的(隐式)定义和初始化开始,直到return结束,return的结果作为主调函数中调用操作符的结果
非引用和指针形参:const和非const形参,都可以用const或非const实参来调用
引用和指针形参:const形参可以用const或非const实参来调用,非const形参只能用非const实参来调用
使用引用形参的另一个好处是:避免复制实参!!
通过引用传递数组时,数组大小成为实参和形参的一部分:
void func(int (&a)[])
{
for(int i - ;i < ;++i)
cout << a[i] << endl;
}
传递多维数组:matrix是指向指针的指针,这个指针指向10元素的数组的首元素
void printValues(int (*matrix)[],int rowSize)
默认实参既可以在函数声明中指定,也可以在函数定义中指定,但是一个形参只能指定默认实参一次,通常在函数声明中指定默认实参
7 局部对象
自动对象:函数调用时才存在的对象称为自动对象
静态局部对象:对象位于函数的作用域,但声明周期跨越了函数的多次调用,则称为静态局部对象
8 内联函数
函数内联说明对于编译器来说只是一个建议,编译器可以选择忽略;内联函数一般定义在头文件中
编译器隐式的将在类内定义的函数当做内联函数
9 重载函数
void func(int a)
{
cout << a << endl;
} void func(int a,int b=)
{
cout << a << endl;
cout << b << endl;
} int main()
{
int x = ;
func(x);//overload ambiguous
}
重载函数应该在同一个作用域中声明,否则某个作用域内声明的函数会屏蔽其他作用域声明的同名函数
重载函数匹配二义性是错误的,形参是枚举类型和形参是整型不存在二义性
重载函数实参匹配:精确匹配—类型提升—标准转换—类类型转换
10 通过函数指针调用函数不需要解引用操作符,直接调用
函数指针做形参 returnType(paramList)或 returnType(*)(paramList)
是函数还是函数指针,看名称是与()结合紧密还是与*结合紧密,()优先级高于*
c++ primer复习(二)的更多相关文章
- c++ primer复习(五):类
一:基本内容 1 类 数据成员:用于存储与类对象相关联的状态 成员函数:对数据成员进行操作 类将接口与实现分离,接口指定了类支持的操作,操作的具体实现细节是类的设计者才需要了解 2 类成员 类成员可以 ...
- C#复习二(Twenty First Day)
呵呵,又来到了今天的总结.这次主要复习了一下字符串的一些处理.今天就来总结一下. 理论: String 字符串,字符串可以看成字符数组,不可变特性(通过for循环,修改string中的元素,失败!) ...
- JAVA基础部分复习(二、集合类型)
对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...
- C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...
- vue复习(二)
一.组件介绍 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的数据具有作用域,以达到组件的复用 二.局部组件 & ...
- 洛谷 P1509 找啊找啊找GF(复习二维费用背包)
传送门 题目背景 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见." "诶,别再见啊..." 七夕...七夕...七夕这个日子,对于sq ...
- Linux 复习二
第二章 一.Linux文件系统 1.基本概念 Linux文件系统为单根的树状结构,根为“/”,文件名大小写敏感,除了“/”都是可用字符,文件名以“.”开始的为隐藏文件. 2.常用文件夹 bin:可执行 ...
- flume复习(二)
一.简介:flume是一种分布式.可靠且可用的系统,能够用于有效的从不同的源收集.聚合和移动大量的日志数据到集中式数据存储.它具有基于流数据的简单灵活的架构,它具有健壮的可靠性机制和许多故障转移和恢复 ...
- C++Primer笔记二
真是一本好书,就这么点,就感觉学到很多了,当然也是我水平太差. 用shell或者bash的时候有一个文件重定向,就是每次程序运行的时候,我们都需要手动输入内容,然后程序输出内容,这时可以用文件来代替. ...
随机推荐
- H.264 Profile、Level、Encoder三张简图 (fps = AVCodecContext->time_base.den / AVCodecContext->time_base.num)
H.264 Profiles Profiles are sets of capabilities. If your black box only supports the Baseline profi ...
- hdoj 1406 完数
完数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- XI.spring的点点滴滴--IObjectFactoryPostProcessor(工厂后处理器)
承接上文 IObjectFactoryPostProcessor(工厂后处理器)) 前提是实现接口的对象注册给当前容器 直接继承的对象调用这个postProcessBeanFactory方法,参数为工 ...
- linux安装svn服务器(yum方式)
1.查看yum是否安装 在终端中输入yum即可如果已经安装,会显示yum的参数 如果没有安装,会提示yum未安装或无效命令…… 2.安装svnyum -y instal ...
- Install Package and Software
svn http://tortoisesvn.sourceforge.net/ git https://download.tortoisegit.org/ http://git-for-windows ...
- Spring3.0 AOP 具体解释
一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.能够这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度 ...
- java中synchronized使用方法
synchronized的一个简单样例 public class TextThread { /** * @param args */ public static void main(String[ ...
- java程序查不出数据来
同样的错误,不可再犯第三次!!! 数据库中是char,里面带空格,但在pl/sql中这样写可以查出来.如下: select ipostid from product t where ipostid= ...
- CSS3超酷移动手机滑动隐藏側边栏菜单特效
这是一组共4种效果很炫酷的CSS3移动手机滑动隐藏側边栏菜单特效. 这四种效果各自是:默认的点击滑动側边栏菜单效果.带3D transforms的滑动側边栏效果.文字缩放和淡入淡出效果的滑动側边栏以及 ...
- jQuery源代码学习笔记:构造jQuery对象
2.1源代码结构: (function( window, undefined ) { var jQuery = (function() { // 构建jQuery对象 var jQuery = fun ...