day02_内联函数、引用、const.

内联函数

  • 使用inline修饰函数的声明或者实现,可以使其变成内联函数
  • 建议声明和实现都增加inline修饰
  • 特点
    • 编译器会将函数调用直接展开为函数体代码
    • 可以减少函数调用的开销
    • 会增大代码体积
  • 注意
    • 尽量不要内联超过10行代码的函数
    • 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数

内联函数与宏

  • 内联函数和宏,都可以减少函数调用的开销
  • 对比宏,内联函数多了语法检测和函数特性
inline int sum(int a, int b) {
	return a + b;
}

const

  • const是常量的意思,被其修饰的变量不可修改

  • 如果修饰的是类、结构体(的指针),其成员也不可以更改

    //int age = 10;
    	// *p0是常量,p0不是常量
    	//const int *p0 = &age;
    
    	// *p1是常量,p1不是常量
    	//int const *p1 = &age;
    	//// p2是常量,*p2不是常量
    	//int * const p2 = &age;
    	//// *p3是常量,p3是常量
    	//const int * const p3 = &age;
    	//// *p4是常量,p4是常量
    	//int const * const p4 = &age;
    

    上面的指针问题可以用以下结论来解决

    • const修饰的是其右边的内容
  • Const 修饰结构体

    struct Student {
    	int age;
    };
    
    	Student stu1 = { 10 };
    	Student stu2 = { 20 };
    
    	const Student * pStu = &stu1;
    	*pStu = stu2; //报错,不能修改其指向的内容
    	(*pStu).age = 30;//报错,不能修改其间接指向的内容
    	pStu->age = 40;//报错,不能修改其指向的内容
    	pStu = &stu2;//对,可修改其指向
    

引用

  • 在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值

  • 在C++中,使用引用(Reference)可以起到跟指针类似的功能

  • 注意点

    • 引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
    • 对引用做计算,就是对引用所指向的变量做计算
    • 在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
    • 可以利用引用初始化另一个引用,相当于某个变量的多个别名
    • 不存在【引用的引用、指向引用的指针、引用数组】
  • 引用存在的价值之一:比指针更安全、函数返回值可以被赋值

void swap(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

int main() {
	int v1 = 10;
	int v2 = 20;
	swap(v1, v2);
	cout << "v1 is " << v1 << endl;
	cout << "v2 is " << v2 << endl;

	/*func() = 30;

	cout << age << endl;*/

	/*int age = 20;
	int &rAge = age;
	rAge = 30;

	int *p = &age;*/

	// 定义了一个引用,相当于是变量的别名
	/*int &rAge = age;
	int &rAge1 = rAge;
	int &rAge2 = rAge1;

	rAge = 11;
	cout << age << endl;

	rAge1 = 22;
	cout << age << endl;

	rAge2 = 33;
	cout << age << endl;*/

	/*Season season;
	Season &rSeason = season;
	rSeason = Winter;
	cout << season << endl;*/

	/*Student stu;
	Student &rStu = stu;
	rStu.age = 20;
	cout << stu.age << endl;*/

	/*int a = 10;
	int b = 20;

	int *p = &a;
	int *&rP = p;
	rP = &b;
	*p = 30;
	cout << a << endl;
	cout << b << endl;*/

	/*int array[] = { 10, 20, 30 };
	int (&rArray)[3] = array;

	int *a[4];
	int (*b)[4];*/
	getchar();
	return 0;
}

posted @ 2021-04-17 22:46  AAAAAAAAA123123  阅读(47)  评论(0编辑  收藏  举报