C++基础 ---C++入门(下)

1.引用与指针的区别

引用和指针的不同点:

        1. 引用概念上定义一个变量的别名,指针存储一个变量地址。

        2. 引用在定义时必须初始化,指针没有要求

        3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体

        4. 没有NULL引用,但有NULL指针

        5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32 位平台下占4个字节)

        6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小

        7. 有多级指针,但是没有多级引用

        8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

        9. 引用比指针使用起来相对更安全

2.内联函数(inline)

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。

频繁调用函数,是需要建立栈帧,是有消耗的,如何解决?(空间换时间)

1.C语言是通过使用宏函数 2.C++使用内联函数

内联函数条件:

        1.不能存在任何形式的循环语句

        2.不能存在过多的条件判断语句

                3.函数体不能过于庞大,不能对函数进行取址操作

4.有时候不加inline,也有而可能是内联函数,内不内联由编译器决定。

面试题:宏函数和内联函数的区别?

3.auto关键字(C++11)

auto类型推导   auto在实际场景中的应用,map容器可以体现一部分出来

auto不能推导的场景:

        1.auto不能作为函数的参数

        2.auto不能直接用来声明数组

ps:typeid(变量/对象).name() 可以用来查询变量/对象的类型

4.基于范围的for循环(C++11)

void TestFor()
{
    int array[] = {1,2,3,4,5};
    for(auto& e : array)
        cout<< e <<endl;
}

5.指针空值nullptr(C++11)

NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:

#ifndef NULL
#ifdef __cplusplus
#define NULL   0
#else
#define NULL   ((void *)0)
#endif
#endif

 可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何 种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦。C++推荐使用nullptr。

注意:

        1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入 的。

        2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。

        3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值