流浪のwolf

卷帝

导航

C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点

#include <iostream>


// 定义一个宏函数
#define ADD(x,y) x+y;
// 宏函数具有速度快等特点 但是写代码有些业务比较繁琐,所以C++中使用了内联函数优化

// 在定义函数前面添加一个inline把这个函数变成内联函数
inline int max(int x,int y) {
    return x > y ? x : y;
}
using namespace std;
int main() {
    const int a = 10; // const 修饰的是 int a
    int* p = (int*)&a;  // &a 的类型是 int *a 所以要强制转换
    *p = 1;  // 并没有改变 a 的值 依然是 1000
    // 1. C和C++指针的区别
    /// 为什么没有改变呢 ??
    /// 这与C++的编辑器有关,实际上 a 变量的地址的值已经改变了 但是当程序使用当了 a 时候,编辑器会直接从寄存器取值
    ///  而不是从地址中取值
    /// 当cosnt修饰这个变量如果是一个立即数,编辑器就会把这个值直接放在寄存器中   在程序中如果出现这个变量时
    /// 编辑器直接i把a 以一个立即的方式直接替换
    /// 如果想要编辑器老老实实去地址中取值 使用 volite 进行修饰
    int arr[a] = {11};   /// 规定了数组的长度为 10 不够的话自动补零
    /// 和 C 的区别 C中const定义的变量可以通过指针修改 而C++中不行
    /// 使用常量 推荐使用 const 修饰 而不是 使用宏定义 defined
    /// C++ 是面向大型程序的 所以要更加严谨一些
    int k;
    for(k = 0;k < 10;k++){
       cout << arr[k] << endl;
    }
    cout << a << endl << arr << endl << p << endl;

    // 2. 内联函数
    ///
    int j = 10;
    int z = 20;
    // cout << ADD(j,z) << endl;
    cout << max(++j,++z) << endl;  /// 使用内联函数是和宏函数一样的 直接替换   内联函数直接在当前替换 return 值
    /// 内联函数既保证了代码的运行的高效性,同时也解决了宏函数Bug的存在
    /// 但是使用宏函数也是有代价的,只能使用简短的代码且没有循环且没有耗时操作的函数才可以
    /// 如果内联函数比较复杂,导致代码膨胀(某个地方使用 100 万次内联函数)
    /// 普通函数的调用过程 1. 函数形参的入栈 》》函数地址的跳转 》》 栈帧的开辟 》》函数的返回及返回值的保存 》》 栈帧的回退
    /// 普通函数调用的优势:调用完之后,就不存在了 不像内联函数那样是直接替换代码的 执行完之后依然存在
    /// 所以对于普通函数 来说,最终的可执行程序代码量不会膨胀。

    return 0;
}

 

posted on 2024-02-22 23:11  流浪のwolf  阅读(4)  评论(0编辑  收藏  举报