• 【C++】C++ 语言对 C 语言的加强 ① ( 实用性增强 - 变量任意位置定义 | register 关键字增强 - 自动进行寄存器优化 )






    一、实用性增强 - 变量任意位置定义



    C 语言定义变量位置 : 在 C 语言中 , 函数作用域中使用到的变量 , 必须在 作用域 开始的位置定义 , 一旦开始编写代码逻辑后 , 在逻辑代码行之间 , 不能定义变量 ;

    • 新版本的 C 语言编译器不会报错 , 可以在 逻辑代码 之间定义变量 ;
      • 在 C99 标准引入了 局部变量 可以在任何位置声明的语法 ;
    • 老版本的 C 语言编译器 ( 还未兼容 C99 标准 ) 会报错 , 如果使用 2000 年左右的 Microsoft Visual C++ 开发环境 , 就会报语法错误 ;

    为了更好的兼容性 , 一般情况下都要将 C 语言的 变量 定义在 函数开始位置 ;


    C++ 语言定义变量位置 : C++ 语言 在 C 语言 的基础上 , 增强了 " 实用性 " , 变量可以在 使用时 再定义 , 不需要在 函数 开始位置定义 ;


    代码示例 :

    // 包含 C++ 头文件
    #include "iostream"
    
    // 使用 std 标准命名空间
    //		该命名空间中 , 定义了很多标准定义
    using namespace std;
    
    
    int main()
    {
    	// 作用域开始位置定义变量
    	int a = 10;
    	// 打印变量值
    	cout << "a = " << a << endl;
    
    	// 作用域中间位置定义变量
    	int b = 10;
    	// 打印变量值
    	cout << "b = " << b << endl;
    	
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    执行结果 :

    a = 10
    b = 10
    Press any key to continue . . .
    
    • 1
    • 2
    • 3

    在这里插入图片描述





    二、register 关键字增强 - 自动进行寄存器优化



    在 C 语言中 , register 关键字 的作用是 告诉 编译器 , 将 使用 register 关键字 修饰的 变量 , 存储在 寄存器 中 , 这样可以提高程序的执行效率 ;

    在 早期 的计算机 中 , 由于硬件限制 , 程序的执行效率不是很高 , 因此需要手动 高速编译器 , 将频繁使用的变量存储在寄存器 中 , 用于提高程序的访问速度 ;

    C89 标准 中 , register 关键字 只能用于修饰 局部变量 , 但是在 C99 标准中 弃用了 register 关键字 ;


    在 C++ 语言 , 也弃用了 register 关键字 , 但是 C++ 编译器 可以自动优化代码 , 不需要手动使用 register 关键字 指定变量存储在编译器 中 , 让 编译器 自动 优化 即可 ;


    使用 & 取地址运算符获取 寄存器变量 地址 ,

    • C 语言中 无法获取 register 寄存器变量的地址 ;
    • C++ 语言中 可以获取 register 寄存器变量的地址 ;

    register 寄存器变量使用代码示例 :

    // 包含 C++ 头文件
    #include "iostream"
    
    // 使用 std 标准命名空间
    //		该命名空间中 , 定义了很多标准定义
    using namespace std;
    
    
    int main()
    {
    	// 作用域开始位置定义变量
    	// 寄存器变量已弃用 , 但是使用不报错
    	register int a = 10;
    
    	// 打印变量值
    	cout << "a = " << a << endl;
    	// 打印变量地址
    	cout << "&a = " << &a << endl;
    	
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    执行结果 :

    a = 10
    &a = 00FAFD78
    Press any key to continue . . .
    
    • 1
    • 2
    • 3

    在这里插入图片描述

  • 相关阅读:
    Leetcode.213 打家劫舍 II
    敏捷在建设项目中的应用
    [第三篇]——CentOS Docker 安装
    STC单片机17——adc 8032
    Jenkins 结合 ANT 发送测试报告
    【深度学习框架】torch.norm函数详解用法
    JavaScript-day01笔记(变量 语法 事件 文本操作 样式操作)
    前端的基本介绍
    VuePress网站如何使用axios请求第三方接口
    渠道管控,为什么最好找第三方
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132367343