再看cpp primer(1)

    技术2022-05-20  37

    1.机器字长:计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度 C++ primer中说一般32位或4字节为一个 字(word)

    但在windows下实际实验,WORD为typedef unsigned short WORD 为2字节 16位

    DWORD:typedef unsigned long DWORD 为4字节 32位

     

    2.大多数计算机将存储器中的每一个字节 (8位)与称为地址的数关联起来

     

    3.整型的赋值

    对于对unsigned类型赋值,如果超出了其取值范围,编译器会对该值对此unsigned类型的最大可能值取模,然后取所得值

    如 8位的unsigned char 其取值范围为0~255,如果超过这个范围,那么编译器会取该值对256(注意是256)取模后的值

    如将 336存放到unsigned char 中,实际赋值为80,以为 336 mod 256 =80

    对于unsigned类型,负数始终超出其取值范围,所以永远不可能存储负值,但是可以把负值赋值给unsigned类型

    负数的取模赞不考虑。。。

     

    当把超多取值范围的值付给signed类型时,由编译器决定实际的值

     

    实际情况:

    sizeof(int)   4

    sizeof(float) 4

    sizeof(double) 8

     

    字面值整形常量的类型默认为int或long类型,具体类型取决于具体字面值的大小

     

    通过在数值后面加L ; u ; UL可将字面值常量强制转换为long,unsigned,unsigned long

     

    浮点数字面值规则

    默认的浮点数字面值常量为double类型,在后面加f ,F表示单精度,加L表示扩展精度12.345L

     

    L'a'  加L能得到wchar_t类型的宽字符字面值

     

    转义字符

    //  反斜杠     /?    问号  /"      /'

     

    可以将任何字符转化为以下形式的通用转义字符

    /ooo

    这里ooo表示3个八进制数字

    字符 '/0'表示空字符(null character)

    也可以用16进制转义字符来定义字符

    /xddd

    由/  一个 x  一个或多个十六进制数字组成

     

    2个相邻的仅由空格或换行符分开的字符串字面值可连接成一个新字符串字面值

    std::cout<<"hello" "world";

    连接字符串字面值和宽字符串字面值是未定义的

     

    变量:

    变量提供了程序可以操作的有名字的存储区,每一个变量都有特定的类型,该类型

    决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在

    该变量上的操作集。

     

    左值:左值可以出现在赋值语句的左边或右边(就是变量的地址)

    右值:右值只能出现在赋值语句的右边(变量的值)

     

    变量是左值,数字字面值是右值

     

    初始化:

    C++支持2中初始化方式,复制初始化和直接初始化。复制初始化用=号,直接初始化则将初始化式放到括号中

    int ival(1024);

    int ival=1024;

    初始化不是赋值,初始化是指创建变量并赋予他初始值,赋值则是擦除对象的当前值并用新的值代替。

     

    在函数体外定义的内置类型变量都初始化为0,在函数体内定义的内置类型变量不进行自动初始化。

    除了用作赋值操作的左操作数,未初始化的变量用作任何地方都是未定义的行为。

     

    定义和声明

    为了让多个文件访问相同的变量,C++区分了定义和声明:

    变量的定义(definition)用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且只有一次定义。

    声明(declaration)用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们也声明了他的类型和名字。

    可以通过extern关键字声明变量而不定义他。

    extern int i;//declaration

    extern 声明不是定义,也不分配存储空间,他只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但

    只能定义一次。

     

    只有当定义也是声明时,声明才可以有初始化式,如果声明有初始化式,那么他可以被当作是定义,即使声明标记为extern

    extern double pi=3.1415;//definition/

    只有当extern声明在函数外部时,才可以含有初始化式

     

     

    在C++中,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量

     

     

    const 对象

    const对象默认为文件的局部变量

    在全局作用域里定义的非const变量时,他在整个程序中都可以访问。

    在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在与那个文件中,不能被其他文件访问。

    可以通过指定const变量为extren,就可以在整个程序中访问const 对象

    //file1.cpp

    extern const int i=10;

     

    //file2.cpp

    extern const int i;

    ...use i

    非const 变量默认为extern,要使const变量能够在其他的文件中访问,必须显示的初始化它为extern

     

    头文件只能用于声明而不是定义

    如 extern int i=10;//这是个定义不能出现在头文件中

    但有例外:头文件可以定义类、值在编译时就已知道的const对象和inline函数。这些实体可以在多个源文件

    中定义,只要每个源文件中的定义是相同的。

     

    C++任何变量只能定义一次,定义会分配存储空间,而所有对该变量的使用都会关联到同一存储空间。以为const

    对象默认为定义它的文件的局部变量,所以把他定义在头文件中是合法的。

    具体解释件c4p 59页


    最新回复(0)