• 变量


    变量

    变量提供一个具名的,可供程序操作的存储空间。

    C++中的每个变量都有数据类型,数据类型决定了变量所占用的空间和布局方式,该空间能存储值的范围,以及该变量能够参与的运算。

    变量定义

    变量定义的基本形式:类型说明符后紧跟一个或多个变量名组成的列表,变量名以逗号分隔,最终以分号结束。

    列表中每个变量名的类型都是由类型说明符指定。

    定义时可以为一个或多个变量赋值。

    初始值

    当变量在创建时获得了一个指定的值,我们就说这个对象被初始化。

    初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。

    列表初始化

    C++ 语言中初始化的形式分为很多种,例如:

    int i = 0;
    int i = {0};
    int i{0};
    int i(0);
    

    用花括号括起来初始化变量的方式称为列表初始化,是C++11中新标准的一部分。

    列表初始化用于内置类型的时候,如果初始值存在丢失信息的风险,编译器将会报错:

    int i{ 3.14 };  //错误,转换存在数据丢失的风险
    int i = { 3.14 }; //错误,转换存在数据丢失的风险
    int i(3.14); //正确,数据丢失部分值
    int i = 3.14; //正确,数据丢失部分值
    

    默认初始化

    如果定义变量时没有指定初值,则变量将执行默认初始化。默认值由变量的类型和变量定义的位置相关。

    对于内置类型,如果未被显示初始化,它的值由定义的位置决定,定义于任何函数体之外的变量被初始化为0,定义于函数体内部的内置类型不被初始化,一个未被初始化的内置类型的变量的值是未定义的,试图拷贝和以其它形式访问此类值时将引发错误。

    每个类各自决定其初始化对象的方式,如果没有显示初始化,其值由类确定。

    变量声明与定义的关系

    C++ 支持分离式编译,该机制允许将程序分割为若干个文件,每个文件可以独立编译。将程序分割为多个文件就要考虑文件之间的代码共享。为了支持分离式编译,C++语言将声明和定义区分开来,声明使得名字为程序所知,而定义负责创建与名字关联的实体。

    • 变量声明规定了变量的类型和名字,这一点与变量定义相同。
    • 变量定义执行了存储空间的申请,甚至会为变量赋初值。
    • 如果想声明一个变量而不是定义一个变量,就在变量名前加 extern 关键字,并且不要显示的初始化该变量。
    • 任何包含了显示初始化的声明都称为定义:
    extern double pi = 3.14; //这是定义,不是声明
    
    • 在函数体内部初始化一个由 extern 关键字标记的变量,将引发错误。
    • 变量只能被定义一次,但是可以被声明多次。

    标识符

    • C++ 标识符由字母,数字,下划线构成,其必须以字母或者下划线开头。
    • 标识符没有长度限制,但是大小写敏感。
    • C++保留的一些名字不能作为标识符。


    变量命名规范

    • 标识符要体现实际含义。
    • 变量名一般用小写字母。
    • 自定义的类名一般以大写字母开头。
    • 如果标识符存在多个单词组成,则单词之间应该有明显的区分,可以使用 _ 加以区分。

    名字的作用域

    • C++中大多数作用域以花括号分分隔。
    • 同一个名字在不同的作用域中可能指向不同的实体,名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。
    • 定义于所有花括号之外的名字拥有全局作用域,全局作用域的名字在整个程序中有效。
    • 定义于花括号之内的名字拥有块作用域,超出花括号的末尾就不能再访问它。
    • 嵌套作用域中,内层作用域将覆盖外层作用域中的名字。
  • 相关阅读:
    高精度A+B
    基本定积分求面积
    二进制算子集和
    linux命令
    Dubbo
    java 集合区别
    Java中Comparable和Comparator区别
    synchronized实现原理
    ThreadLocal 原理
    java volatile关键字
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/12498690.html
Copyright © 2020-2023  润新知