处理数据

大约 2 分钟

简单变量

C++11的初始化方式

int hamburgers = {24};//set hamburgers to 24
int emus{7};//set emus to 7
int pocs = {}//set pocs to 0

使用大括号初始化任何类型,可以省略等号,有助于更好防范类型转换错误

以不同进制表示整数

int chest = 42;//decimal integer literal
cout << chest << endl;
cout << hex;//十六进制
cout << chest << endl;
cout << oct;//八进制
cout << chest << endl;

关于char

  • 通用字符名
    • Unicode
    • ISO 10646
  • signed char 和 unsigned char
    • char类型的具体实现取决于编译器
    • 有特殊需求时应该使用signed char 和 unsigned char
  • wchar_t, char16_t, char32_t(后二是c++11新增类型)
    • wchar_t: 宽字符类型
    • char16_t: 16位字符类型
    • char32_t: 32位字符类型
    • char16_t 和 char32_t 用于Unicode字符集

bool类型

  • true 和 false
  • 自动转换
    • 0转换为false,非0转换为true
    • false转换为0,true转换为1

用const替代#define

const typename variable = value;

  • 指明类型
  • 有作用域

浮点数

  • cout.setf(ios_base::fixed, ios_base::floatfield);强制使用定点表示法: 1.2345e+4 -> 12345.000000(防止E表示法,显示后六位)

算术运算符

以{}初始化时进行的类型转换

  • 如果存在丢失信息的风险,编译器将报错
  • 如果存在截断的风险,编译器将报警告
  • 如果存在扩展的风险,编译器将报警告

整型提升

  • 为了进行运算,C++将char、short等整型值转换为int类型

校验表

  • 编译器通过校验表来确定在算术表达式中的类型转换(附C++11校验表)
    • 如果有一个操作数是long double,则将另一个操作数转换为long double
    • 否则,如果有一个操作数是double,则将另一个操作数转换为double
    • 否则,如果有一个操作数是float,则将另一个操作数转换为float
    • 否则,说明操作数都是整型,进行整型提升
    • 如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低,则将较低级别的操作数转换为较高级别的操作数的类型
    • 否则,如果有一个操作数是无符号的,且另一个操作数是有符号的,则将有符号的操作数转换为无符号的操作数的类型
    • 否则,如果有符号类型可表示无符号类型的所有值,则将无符号的操作数转换为有符号的操作数的类型
    • 否则,两个操作数都转换为有符号类型的无符号版本

强制类型转换

  • type(expression)C++独有
  • (type)expression
  • static_cast<type>(expression)C++独有,更严格