内联函数(inline function)
◼ 使用inline修饰函数的声明或者实现,可以使其变成内联函数 建议声明和实现都增加inline修饰
◼特点 编译器会将函数调用直接展开为函数体代码 可以减少函数调用的开销 会增大代码体积
◼注意
尽量不要内联超过10行代码的函数 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数
内联函数与宏
◼ 内联函数和宏,都可以减少函数调用的开销 ◼ 对比宏,内联函数多了语法检测和函数特性
◼ 思考以下代码的区别 #define sum(x) (x + x)
inline int sum(int x) { return x + x; } int a = 10; sum(a++);
#pragma once
◼ 我们经常使用#ifndef、#define、#endif来防止头文件的内容被重复包含 ◼#pragma once可以防止整个文件的内容被重复包含
◼区别
#ifndef、#define、#endif受C\C++标准的支持,不受编译器的任何限制 有些编译器不支持#pragma once(较老编译器不支持,如GCC 3.4版本之前),兼容性不够好 #ifndef、#define、#endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件
引用(Reference)
◼ 在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值
◼ 在C++中,使用引用(Reference)可以起到跟指针类似的功能
◼ 注意点
引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
对引用做计算,就是对引用所指向的变量做计算
在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
可以利用引用初始化另一个引用,相当于某个变量的多个别名
不存在【引用的引用、指向引用的指针、引用数组】
◼ 引用存在的价值之一:比指针更安全、函数返回值可以被赋值
const
◼ const是常量的意思,被其修饰的变量不可修改 如果修饰的是类、结构体(的指针),其成员也不可以更改
◼ 以下5个指针分别是什么含义?
◼ 上面的指针问题可以用以下结论来解决:
const修饰的是其右边的内容
常引用(Const Reference)
◼ 引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用
const必须写在&符号的左边,才能算是常引用
◼ const引用的特点
可以指向临时数据(常量、表达式、函数返回值等)
可以指向不同类型的数据
作为函数参数时(此规则也适用于const指针)
✓ 可以接受const和非const实参(非const引用,只能接受非const实参)
✓ 可以跟非const引用构成重载
◼ 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量