美文网首页
C++学习笔记(内联函数、引用、const)

C++学习笔记(内联函数、引用、const)

作者: 朝夕向背 | 来源:发表于2018-10-12 09:34 被阅读0次

    内联函数

    使用inline修饰函数的声明或者实现,可以使其变成内联函数

    #include <iostream>
    using namespace std;
    inline int sum(int a, int b){
        return a+b;
    }
    int main(int argc, const char * argv[]) {
        cout << sum(11, 22) << endl;
        return 0;
    }
    

    如果int sum(int a, int b)不使用inline修饰,cout << sum(11, 22) << endl;在调用sum函数时,会先开辟一段栈空间,计算出结果值,然后在回收内存空间,在赋值给函数sum值。

    • 使用inline修饰int sum(int a, int b),相当于直接使用cout << a+b << endl;,也就是把sum(11, 22)展开为函数体代码。

    内联函数特点

    • 编译器会将函数调用直接展开为函数体代码
    • 可以减少函数调用的开销
    • 减少函数的体积

    注意

    • 尽量不要内联超过10行代码的函数
    • 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数

    内联函数和宏的区别
    1、内联函数和宏,都可以减少函数调用的开销
    2、对比宏,内联函数多了语法检测和函数特性

    pragma once

    pragma once可以防止整个文件的内容被重复包含

    • ifndef、define、endif受C/C++标准的支持,不受编译器的任何限制
    • 有些编译器不支持#pragma once(较老编译器不支持,如GCC 3.4版本之前),兼容性不够好。
    • ifndef、define、endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件

    引用(Reference)

    在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值。
    在C++中,使用引用(Reference)可以起到跟指针类似的功能。

    C语言中使用*
    C++语言使用&
    

    实例如下

    #include <iostream>
    using namespace std;
    
    int main(int argc, const char * argv[]) {
        int age = 20;
        int &pAge = age;
        cout << pAge << endl;
        return 0;
    }
    

    注意点

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

    引用存在的价值之一:比指针更安全、函数返回值可以被赋值

    引用的本质是就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针

    const

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

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

    常引用 (const reference)

    引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用

    • const必须写在&符号的左边,才能算是常引用。

    const引用的特点

    • 可以指向临时数据(常量、表达式、函数返回值等)
    • 可以指向不同类型的数据
    • 作为函数参数时(此规则也适用于const指针)
      ✔️ 可以接受const和非const实参(非const引用,只能接受非const实参)
      ✔️可以跟非const引用构成重载
    • 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量

    相关文章

      网友评论

          本文标题:C++学习笔记(内联函数、引用、const)

          本文链接:https://www.haomeiwen.com/subject/okdwaftx.html