内联函数、auto关键字、范围for、nullptr

内联函数

将一个函数指定为内联函数,通常就是将它在每个调用点上“内联地”展开。这样就没有函数调用建立栈帧的开销,可以提升程序运行的效率。

一般来说,内联机制用于优化规模较小(即函数不是很长,没有具体的说法,取决于编译器内部的实现)、流程直接、频繁调用的函数。一般的编译器不支持内联递归函数。

内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。

inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会
用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运
行效率。
内联不建议声明和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,链接就会找不到。

内联和宏

内联是C++的语法,在C语言中使用宏。但是宏有一些缺陷

宏的缺点:

1、不方便调试宏(因为预处理阶段进行了宏替换)

2、导致代码可读性差,可维护性差,容易误用

3、没有类型安全的检查

基于宏的这些缺点,C++就引入了内联函数。

那么C++哪些技术替换了宏

1、常量的定义(#define N 100 ——> const N = 100)

2、短小的函数使用内联函数。

auto关键字

使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种类型的声明,而是一个类型声明时的“占位符”,然后编译器会在编译阶段进行推导,将auto替换为变量实际类型。

auto使用准则

用auto声明指针类型时,auto和auto*没有区别,但auto声明引用类型时必须加&,即auto。
在同一行定义多个变量时,这一行的所以变量类型都必须是相同的。比如:auto a = 1, b = 4.0,这样编译器会报错
auto不能作为形参类型,不能声明数组

范围for

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(auto e : arr)
    cout << e << ' ';

注意:与普通循环类型,可以使用continue结束本次循环,也可以使用break跳出循环。 

范围for的使用条件

1、for迭代的范围必须是确定的

对于数组而言,就是数组的第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end方法,begin到end就是范围

void fun(int arr [])
{
    for(auto e : arr)
    {
        cout << e << ' ';
    }
}

这是不允许的,因为数组传参是一个指针,并不是一个数组。所以这个范围没有确定。 

2、迭代的对象要实现++和==操作

NULL和nullptr

NULL是C语言的一种用法,其实它并不是一个指针类型,它是利用宏替换。#define NULL 0

想要将它当成指针类型使用,必须强转。像这样:(int*)NULL

所以C++引用了一个新的关键字nullptr
注意:在C++11中,sizeof(nullptr) == sizeof((void*)0);

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值