目录
一、bool类型:
二、内联函数:
三、引用:
四、函数重载:
五、函数参数缺省
bool是一种数据类型,用于存储逻辑值
有两种取值,分别为true(真)和false(假)
所占内存大小:1字节
bool 变量名 = true (false);
是C++新增的关键字,用于表示逻辑值
true代表“逻辑真”,非0为真,一般用1表示真
false代表“逻辑假”,0为假
不仅仅只能用true或false,还可以是一个数值
如果用数值表示,遵循非0为真的原则
#include
int main()
{
bool Isture = true;
Isture = false;
Isture = 0;
Isture = 3;
Isture = 1 > 2;
if (Isture)
{
printf("真的。\n");
}
else
{
printf("假的。\n");
}
printf("%d\n", sizeof(bool)); //1
return 0;
}
一个函数,是通过内存膨胀的方式来减少函数调用时的跳转时间,以空间换时间。
指的是代码区的代码变多。
使用内联函数之后,这个函数在调用时就不会在栈区申请内存来运行,也就是说少了 入栈出栈的时间。
一个普通函数在调用时会有入栈出栈操作。
inline
基本格式
inline 数据类型 变量名()
{
......
}
定义一个内联函数,也就是在定义一个函数的时候在返回值类型前面加一个
inline关键字用来修饰整个函数 。
1.本质上,内联函数也是一个函数,其使用与普通函数的使用方法一致。
2.作用是,以空间交换时间,节省函数调用时的跳转时间。
3. 如果,函数的函数体代码过长,或者函数体中有循环,
则不建议使用内联函数。
4.如果,函数的函数体是一个简单的功能,如简单的赋值语句或者返回语句,并且使用频率高
则建议使用内联函数。
#include
inline int MAX(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a, b;
printf("请输入两个整数: ");
scanf("%d%d", &a, &b);
printf("两者中较大数为: %d\n", MAX(a,b));
return 0;
}
是对一个变量或对象取的别名。
既然是对一个变量或对象取别名,那就先得有变量或对象,不能凭空取一个别名,
也就是说,定义引用必须初始化。
真名的数据类型 & 别名 = 真名;
引用的是什么类型的变量,这个引用的使用就与被引用的使用方法一样。
1、引用是别名,所以定义的时候必须初始化。
2、对引用的操作和对引用对应的变量的操作是完全等价的。
3、& 在引用这里不是取址符,而是起到标志的作用。
4、引用的类型必须和其所对应的变量的类型相同。
(数据类型与真名的一致)
5、引用不是定义一个新的变量或对象,因此不会为此引用开辟一个的新的内存空间。
6、同一变量或对象可以有多个别名。
在效率上是没有多大的区别的。
1、引用是别名,不会被分配存储空间;(别名和真名共享同一块内存地址)
指针是实体,会被分配存储空间。
2、引用在定义时必须初始化,
而且不能被改变;(引用不能改变其所带指的变量或对象)
指针定义时可以不用初始化,
也可以改变指向。
3、引用没有多级引用的概念,指针有多级指针。
4、引用是直接访问,指针是间接访问。
#include
int main()
{
int a = 1, b = 2;
int & A = a;
int & A = b; //×,重定义,多次初始化
int & C = A; //可以对引用取别名,但没有意义
printf("%d\n", A);
A = 3;
printf("%d\n", a); //3
return 0;
}
引用可以作为函数参数进行传递,这称之为引用传递。
引用传递和地址传递一样,都可以通过形参的改变影响实参的值。
#include
int SUM(int &t, int y)
{
return t += y;
}
int main()
{
int a, b;
int & x = a;
printf("请输入两个整数: ");
scanf("%d%d", &a, &b);
putchar('\n');
printf("两数之和为: %d\n", SUM(x,b));
putchar('\n');
printf("%d\n",a); //值为a+b的和
return 0;
}
在同一项目中定义的函数名字可以重复,也就是说可以有同名的函数,但是要满足特定的条件。
1、函数名必须一致
2、函数的参数列表必须不同
( 参数列表个数不同或相对应位置上的类型不同)
重载函数满足上述两个条件即可,函数的返回值不同不在条件内容中。
#include
void SUM(int x, int y)
{
printf("%d\n", x + y);
}
void SUM(float x, float y)
{
printf("%f\n", x + y);
}
int main()
{
int a, b;
printf("请输入两个整数: ");
scanf("%d%d",&a,&b);
SUM(a, b);
putchar('\n');
float c, d;
printf("请输入两个小数: ");
scanf("%f%f", &c, &d);
SUM(c, d);
return 0;
}
赋值兼容导致对重载函数的调用不明确。
在C/C++中浮点型常量默认为double类型,
double类型可以给int、float类型的变量赋值。
#include
void SUM(int x,int y)
{
printf("%d\n",x + y);
}
void SUM(float x,float y)
{
printf("%f\n",x + y);
}
int main()
{
SUM(1.1,2.2); //报错
return 0;
}
1、加入新的对应的重载函数
2、实参进行强制类型转换赋值
例如:
#include
void SUM(int x,int y)
{
printf("%d\n",x + y);
}
void SUM(float x,float y)
{
printf("%f\n",x + y);
}
int main()
{
SUM((int)1.1,(int)2.2); //no problem
return 0;
}
在函数声明时,给某一形参赋一个默认值,
在调用该函数时,
如果不给这个带有默认值的形参传递参数,这个形参就会使用默认值;
如果给定了参数,就以给定值为准。
1、如果有函数声明,就只能在函数声明时给定缺省值(默认值),不可在函数定义时给定。
2、函数参数缺省只能从后往前缺省。
3、函数参数缺省所给定的值必须是常量,不可是变量。
4、函数参数给缺省值时需要注意不要与重载函数产生二义性。
#include
void SUM(int x, int y=22)
{
printf("%d\n", x + y);
}
void SUM(float x, float y=2.2)
{
printf("%f\n", x + y);
}
int main()
{
SUM(44); //66
SUM((float)4.4); //6.600000
return 0;
}
__________________#