C++学习 <三> 基础语法(2)

1、内联函数inline

作用:不会调用函数,而是将代码块展开,直接复制过去。不会开辟栈空间,也不会回收栈空间,这样就提高效率。

使用内联函数的情况:
1.函数代码体积不大
2.经常频繁调用

但是也不一定会被编译器展开成为内联函数,比如递归函数,就不会被编译器展开成为内联函数。
inline int sumA(int v1, int v2) {
    return v1 + v2;
}

int main(int argc, const char * argv[]) {
    cout << sumA(12, 2) << endl;
    return 0;
}

2、内联函数与宏的区别

  • 两者都可以减少函数调用的开销
  • 对比宏,内联函数多了语法检测和函数特性
  • 思考一下代码的区别
#define sum(x) (x + x)

inline int sum1(int x) {
    return x + x;
}


int main(int argc, const char * argv[]) {
    int a = 10;
    int b = 10;
    cout << sum(++a) << endl; 
    cout << sum1(++b) << endl;
    
    return 0;
}
  • 不同的编译器环境下,输出的结果有所不同,第一个有的是23,有的是24
  • 但是这种使用情况下,都不太合理,函数调用方式更加合理

23
22
Program ended with exit code: 0

3、表达式用法

int a = 1;
int b = 2;
// 情况一:
// (a = b) = 4;  // 输出结果 a = 4;

// 情况二:
// (a > b ? a : b) = 4; // 输出结果 b = 4;

4、const

  • 修饰不可变常量

以下例子:关键点
const只修饰挨着的右边的内容

int age = 10;
int height = 30;

const int *p1 = &age;  // *p1 不能改,p1可以改
int const *p2= &age; // 和p1一样,和上面没区别
int * const p3= &age;
*p3 = 20;
// p3 = &height; // 这个会报错

const int * const p4 = &age; // p4 和 p5一样
int const * const p5 = &age;

5、reference 引用

  • 定义了一个age的引用,refAge相当于是age的别名
  • 一旦使用的时候,就必须要初始化
  • 一旦指向某个元素,就不能修改,一夫一妻,从一而终。
  • 价值:比指针更安全
  • 如下
int age = 10;
	
// 定义了一个age的引用,refAge相当于是age的别名
int &refAge = age;

refAge = 20;  // 使用refAge,就是相当于使用age
  • 当作参数使用,交换值
void swap(int *v1, int *v2) { // 不使用引用
	int tmp = *v1;
	*v1 = *v2;
	*v2 = tmp;
}

void swap2(int& v1, int& v2) { // 使用引用
	int tmp = v1;
	v1 = v2;
	v2 = tmp;
}

int main() {

	int a = 10;
	int b = 20;
	// swap(&a, &b);
	swap2(a, b);
	cout << "a =" << a << ", b =" << b << endl;

	getchar();
	return 0;
}
  • 引用的本质:就是指针,是弱化了的指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值