C++ 笔记——变量和基本类型(一)

1,737 阅读4分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

1、基本内置类型

C++基本数据类型包括算术类型,空类型

1.1算术类型

算术类型包括:字符、整型数、布尔值以及浮点数

  • 字符:基本字符类型char,8位,1字节。扩展字符集包括wchar_t、char16_t、char32_t。

    • wchar_t:宽字符,16位
    • char16_t:Unicode字符,16位
    • char32_t:Unicode字符,32位
  • 整型:包含short、int、long、long long

    • short:短整型,至少16位
    • int:整型,至少16位,一般为32位
    • long:长整形,至少为32位
    • long long:长整形,至少为64位(C++11)

注意:整型可划分为有符号与无符号的,无符号整型能表示的数的范围是由符号的二倍,有符号整型最高位是符号位0表示正,1为负。明确知晓整型变量数值为非负时,选用无符号类型

  • 布尔值(bool):真(true)、假(false)
  • 浮点数:float、double、long double
    • float:单精度浮点数、至少6位有效数字,有效位数为7位,float总大小为32位
    • double:双精度浮点数、至少10位有效数字,有效位数为16位,float总大小为64位
    • long double:扩展精度浮点数、至少10位有效数字,long double总大小一般为128位

1.2类型转换

编译器自动把一个类型转换为另一种相关类型

常见的类型转换

  • 赋值

    #include<iostream>
    
    int main(int argc, char const* argv[])
    {
        float x = 1.302;
        int y = x;     //1
        bool z = y;   //true
        double a = z; //1.0
        unsigned int b = -1;//2进制对应的无符号值,0xFFFFFFFF
        int c =2e32;//未初始化,vc2019c被初始化为0;
        std::cout <<x<<'\n' << y << '\n' << z << '\n' << a << '\n' << b << '\n' << c << std::endl;
        return 0;
    }
    
  • 判断

    int key=302;
    if(key){}//key的值自动转换为bool类型,key不会变化
    

注意:

  • 不能将无符号是否小于0来作为循环条件,因为无符号数永远不会小于零

1.3字面值常量

  • 整型、浮点型、字符、字符串型字面量

顾名思义就是具体的数,字符,字符串,布尔值。比如:2,4,6,8,3.14,0xff,“hello world”等等

  • 转义序列

泛化的说就是由\和其他字符组成的转义序列,比如'\t','\n',"\tHHH"

  • 指定字面量类型
//字符/字符串
前缀+字符/字符串  u -> char16_t ; U -> char16_t ; L -> wchar_t ;u8 -> char
//整型/浮点型
整型/浮点型+后缀  整型:   u/U -> unsigned; l/L -> long ; ll/LL -> long long
    		   浮点型:  f/F->float; l/L -> long double
  • 布尔与指针字面值

bool:true、false。指针:nullptr(C++11)

2、变量

变量(variable)和对象(object)可以理解为一个意思

2.1变量定义

  • 初始化

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

注意:初始化不是赋值,初始化的含义是创建变量时赋予其一个初值,而赋值是,擦除当前值写入新值

  • 列表初始化 list initialization

比如:

vector<int> x{1,2,3,4};
int c={2};

注意:列表初始化若存在丢失信息的风险,编译器就会报错,比如int c={2.5};

  • 默认初始化

任何函数体外部变量未显示初始化都会默认初始化为零,任何函数体内部变量未显示初始化则不被初始化,若访问或者拷贝此变量则编译器会报错

2.2变量声明定义

变量声明在变量名前添加extern关键字

extern char o;//声明
char j;//定义

变量可以多次声明不能被多次定义

2.3标识符

即变量名,由字母数字下划线组成,必须以字母或下划线开头,对大小写敏感,不能与关键字冲突,可以进行驼峰命名法或下划线命名法

2.4名字作用域

一般以花括号为界,可以传递至内层括号(若名字冲突,则以内层为准),不能向外层括号传递

#include<iostream>
#include<vector>
int cd;
int main(int argc, char const* argv[])
{
    unsigned int i = 10,l=30;
    int j =-20;
    j = i +j;
    {
        int j = 30;
        std::cout << j << std::endl;
    }
    std::vector<int> x{ 1,2,3,4 };
    std::cout << cd<< std::endl;
    return 0;
}

输出为30,-10

把外层作用域命名则可以通过域名以及域作用符号来访问外层变量

#include<vector>
namespace JJJ {
    int j = -20;
}
int cd;
int main(int argc, char const* argv[])
{
    unsigned int i = 10,l=30;
    int j = -20;
    j = i +j;
    {
        int j = 30;
        std::cout <<JJJ::j << std::endl;
    }
    std::vector<int> x{ 1,2,3,4 };
    std::cout << j<< std::endl;
    return 0;
}