《C++ Primer》阅读笔记(二)变量和基本类型

本文详细探讨了C++中的变量和基本类型,包括算数类型(如整型、浮点型)、类型转换、字面值常量、变量的定义和作用域、复合类型(如引用和指针)以及const限定符的使用。文章阐述了如何选择合适的算数类型、类型转换的规则、指针和引用的特性,以及const在不同类型声明中的作用。此外,还介绍了C++11的新特性,如auto类型说明符和decltype类型指示符。通过阅读,读者能够深入理解C++中的变量和基本类型概念及其应用。
摘要由CSDN通过智能技术生成

第2章 变量和基本类型

基本内置类型(Primitive Built-in Types)

算数类型(Arithmetic Types)

算数类型分为两类:整型(integral type)、浮点型(floating-point type)。

bool类型的取值是truefalse

一个char的大小和一个机器字节一样,确保可以存放机器基本字符集中任意字符对应的数字值。wchar_t确保可以存放机器最大扩展字符集中的任意一个字符。

在整型类型大小方面,C++规定short ≤ int ≤ long ≤ long longlong long是C++11定义的类型)。

浮点型可表示单精度(single-precision)、双精度(double-precision)和扩展精度(extended-precision)值,分别对应floatdoublelong double类型。

除去布尔型和扩展字符型,其他整型可以分为带符号(signed)和无符号(unsigned)两种。带符号类型可以表示正数、负数和0,无符号类型只能表示大于等于0的数值。类型intshortlonglong long都是带符号的,在类型名前面添加unsigned可以得到对应的无符号类型,如unsigned int

字符型分为charsigned charunsigned char三种,但是表现形式只有带符号和无符号两种。类型charsigned char并不一样, char的具体形式由编译器(compiler)决定。

如何选择算数类型:

  • 当明确知晓数值不可能为负时,应该使用无符号类型。

  • 使用int执行整数运算,如果数值超过了int的表示范围,应该使用long long类型。

  • 在算数表达式中不要使用charbool类型。如果需要使用一个不大的整数,应该明确指定它的类型是signed char还是unsigned char

  • 执行浮点数运算时建议使用double类型。

类型转换(Type Conversions)

进行类型转换时,类型所能表示的值的范围决定了转换的过程。

  • 把非布尔类型的算术值赋给布尔类型时,初始值为0则结果为false,否则结果为true
  • 把布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1。
  • 把浮点数赋给整数类型时,进行近似处理,结果值仅保留浮点数中的整数部分。
  • 把整数值赋给浮点类型时,小数部分记为0。如果该整数所占的空间超过了浮点类型的容量,精度可能有损失。
  • 赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数(8比特大小的unsigned char能表示的数值总数是256)取模后的余数。
  • 赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。

避免无法预知和依赖于实现环境的行为。

无符号数不会小于0这一事实关系到循环的写法。

// WRONG: u can never be less than 0; the condition will always succeed
for (unsigned u = 10; u >= 0; --u)
    std::cout << u << std::endl;

u等于0时,--u的结果将会是4294967295。一种解决办法是用while语句来代替for语句,前者可以在输出变量前先减去1。

unsigned u = 11;    // start the loop one past the first element we want to print
while (u > 0) 
{
    --u;    // decrement first, so that the last iteration will print 0
    std::cout << u << std::endl;
}

不要混用带符号类型和无符号类型。

 

字面值常量(Literals)

0开头的整数代表八进制(octal)数,以0x0X开头的整数代表十六进制(hexadecimal)数。在C++14中,0b0B开头的整数代表二进制(binary)数。

整型字面值具体的数据类型由它的值和符号决定。

C++14新增了单引号'形式的数字分隔符。数字分隔符不会影响数字的值,但可以通过分隔符将数字分组,使数值读写更容易。

// 按照书写形式,每3位分为一组
std::cout << 0B1'101;   // 输出"13"
std::cout << 1'100'000; // 输出"1100000"

浮点型字面值默认是一个double

由单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符称为字符串字面值。

字符串字面值的类型是由常量字符构成的数组(array)。编译器在每个字符串的结尾处添加一个空字符'\0',因此字符串字面值的实际长度要比它的内容多一位。

转义序列:

含义 转义字符
newline \n
horizontal tab \t
alert (bell) \a
vertical tab \v
backspace \b
double quote \"
backslash \\
question mark \?
single quote \'
carriage return \r
formfeed \f

std::cout <&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值