博客
关于我
C++ Primer 5th笔记(2)chapter 2变量和基本类型:变量声明、关键字
阅读量:60 次
发布时间:2019-02-26

本文共 1616 字,大约阅读时间需要 5 分钟。

0. 几个零星知识点

在编程过程中,了解一些基本的知识点能够帮助我们更高效地开发程序。以下是一些值得注意的内容:

  • 嵌套作用域:在嵌套作用域中,局部变量会遮盖全局变量。这意味着如果你在函数内部定义了一个变量,外部的全局变量将被这个局部变量覆盖。

  • char 的表示:在不同的编译器或平台上,char 可能是有符号的也可能是无符号的。因此,在跨平台开发时,需要特别注意这一点。

  • 标识符的大小写敏感性:C++ 是大小写敏感的语言。例如,变量名 BigIntbigint 是两个不同的变量。


  • 1. 变量声明和定义

    在 C++ 中,变量的声明和定义是分开的步骤。这种设计让我们能够在不同的文件中进行声明和定义,例如在头文件中进行声明,而在源文件中进行定义。

    • 声明extern int i; 这行代码的作用是声明一个名为 i 的整数变量,并指定其类型。声明只告诉编译器这个变量的存在,但并不分配内存或赋值。

    • 定义extern double pi = 3.45; 这行代码不仅声明了一个 double 类型的变量 pi,还为它分配了内存并赋值了初始值。

    需要注意的是,变量可以被多次声明,但只能被定义一次。如果一个变量在多个文件中被声明,那么这些声明必须一致,否则会导致编译错误。

    例如,shareVariable.h 文件中可能只声明了 int nShare,而在 useShareVariable1.huseShareVariable2.h 文件中,分别在不同的位置定义了 nShare 的值。这种方式可以在多个文件中共享同一个变量。


    2. C++ 关键字

    C++ 中有许多关键字用于实现特定的功能。以下是一些常见关键字及其用途:

    • decltype:用于指定一个变量的类型。它会根据变量的实际类型来推断类型信息。

    • asm:用于在汇编代码中使用 C++ 表达式。这通常用于优化性能或在特定情况下工作。

    • constexpr:用于在常数表达式中确保结果能够在编译时被计算出来。这对于性能敏感的代码非常有用。

    • const_cast:用于将一个表达式的结果转换为 const 类型。这种转换通常用于安全地从非常数变量转换为常数变量。

    • mutable:用于标记一个 const 成员函数的参数或成员变量,允许修改其值。这种情况非常少见,因为 const 意味着不可修改。

    • noexcept:用于标记函数或变量,表示它们不接受异常。这种机制可以防止异常在未被捕获的情况下传播。

    • thread_local:用于标记变量或函数,表示它们在多线程环境中仅在当前线程中存在。

    • static_cast:用于将一个表达式的结果转换为特定的类型。这种转换比 dynamic_cast 更安全,因为它不需要运行时类型信息。

    • static_assert:用于在编译时检查某个条件是否为真。如果条件为假,编译会失败。

    • reinterpret_cast:用于将一个表达式的值 reinterpret 为另一个类型。这种转换需要谨慎,因为它不会执行类型检查。

    • volatile:用于标记一个变量,表示它可能会被外部代码修改。这种情况下,C++ 会生成适当的加载和存储操作,确保内存一致性。


    3. C++ 操作符替代名

    C++ 提供了一些替代运算符的关键字,可以在特定情况下使用。这些关键字通常用于优化代码或满足特定的编译需求。

    以下是一些常见的替代运算符:

    • []:用于数组访问。
    • []:用于内联函数(inline function)的参数传递。
    • &:用于引用类型。
    • *:用于指针。
    • **:用于过载运算符。
    • <<:用于输出流操作符。
    • >>:用于输入流操作符。
    • +=-=*= 等:用于自增、自减和自乘操作。

    参考

    如果你对这些内容感兴趣,可以进一步查阅以下资料:

    • C++ 标准文档
    • 《C++ 程序设计语言》(The C++ Programming Language)

    转载地址:http://jbuz.baihongyu.com/

    你可能感兴趣的文章
    NOIP模拟测试19
    查看>>
    NOIp模拟赛二十九
    查看>>
    Vue3+element plus+sortablejs实现table列表拖拽
    查看>>
    Nokia5233手机和我装的几个symbian V5手机软件
    查看>>
    non linear processor
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NoNodeAvailableException None of the configured nodes are available异常
    查看>>
    Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
    查看>>
    nopcommerce商城系统--文档整理
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    NoSQL数据库概述
    查看>>
    Notadd —— 基于 nest.js 的微服务开发框架
    查看>>
    NOTE:rfc5766-turn-server
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>