#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; }
标签:const,函数,int,C++,编辑器,内联 From: https://www.cnblogs.com/zhulongxu/p/18028414