基础

1

标准输入输出对象:

cin :istream对象,从标准输入读取数据

cout:ostream对象,将数据写入到标准输出,一般用于正常内容的输出。默认情况下,读取cin或程序非正常终止时会刷新cout

cerr:ostream对象,关联到标准错误,输出程序的错误信息,默认情况下写到cerr的数据是不缓冲的。

clog:ostream对象,关联到标准错误,默认情况下写到clog的数据是被缓冲的。

定义在函数内部的内置类型默认是不初始化的,除非有显式的初始化语句,未初始化的变量的值无意义。

2 变量和基本类型

基本内置类型:算数类型和空类型

算数类型:整型(包括字符类型,布尔类型),浮点型

基础_第1张图片
C++ 算数类型

有符号和无符号

1,当赋给无符号类型一个超出其表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。unsigned char c = -1;//c=255,即255%256=255

2,赋给带符号类型一个超出表示范围的值时,结果是未定义的

3,含有无符号类型的表达式中,有符号类型的值会自动转换为无符号类型

字面值常量

20 十进制;024 八进制;0x24 0X24 十六进制

默认情况下,十进制字面值是带符号数,八进制或十六进制不确定;

3.14 ;3.1415E0; 0.;0e0;.001

默认情况下,浮点型字面值是double

'a' 字符字面值

"hello" 字符串字面值

转义序列

基础_第2张图片
转义序列

指定字面值的类型

基础_第3张图片
指定字面值类型

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

int a  = 0;

int a = {0};

int a{0};

int a(0);

用{}初始化为列表初始化,对于内置类型来说,使用列表初始化若初始值存在丢失信息的风险,编译器会报错。

默认初始化:定义时没有指定初值。如果是内置类型,全局或static变量都被初始化为0,但在函数体内部的局部变量值未定义,不可使用。对于类,由类本身决定其值。

声明规定了变量的类型和名字,定义则还会分配空间(初始化);任何包含了显式初始化的声明即成为定义;

extern double pi = 3.1415;//定义

double pi = 3.1415;//定义

extern double pi;//声明

复合类型:基于其他类型定义的类型,如指针和引用;

引用定义时必须被初始化,是对象的别名,无法重新绑定到另一个对象上。

指向指针的引用

int *p;

int  *&r = p;//r是对指针p的引用

const int &r1 = i;//对常量的引用,不可通过r1改变i的值

const int *p;//指向常量的指针

int *const p;//指针常量

const int *const p;

顶层const:表示指针(或任何对象)本身是常量

底层const:表示指针(或引用)指向的对象是一个常量

常量表达式:

值不会改变(const)并且编译过程中就可以得到计算结果的表达式。

将变量声明为constexpr类型,使编译器来验证变量的值是否是一个常量表达式。此变量是常量并且必须用常量表达式来初始化。

constexpr int a = 12;

constexpr int a = func();//当func()是constexpr函数时,成立

constexpr指针的初始值必须是nullptr或0,或存储于固定地址中的对象。constexpr引用的初始值必须是固定地址中的对象。

constexpr int *p = nullptr;//constexpr修饰p

类型别名:某类型的同义词,简化类型的表示

typedef double othername;

using othername = double;

typedef  double *p;//p的类型是double*

例如:

typedef char *pstring;

const pstring cstr = 0;//cstr 是指向char的常量指针

const pstring *p;//p指向一个指向char的常量指针,不可简单的把pstring展开代入来理解,const修饰pstring,而pstring首先是一个指针

auto 类型说明符

1,auto定义变量必须有初始值,编译器根据初始值推断类型

2,同一条语句声明多个变量,这些变量的初始值的类型必须一样

3,使用引用初始化auto定义的变量,实际上是用引用的对象初始化,则推断为引用的对象的类型

4,auto一般会忽略顶层const,保留底层const。const auto f = ci;//显式顶层const

decltype类型指示符

使用表达式的类型推断类型。

1,decltype(f()) sum;//使用函数的返回值类型

2,decltype(x) sum;//使用变量的类型,注意不可忽略const和引用类型

3,如果表达式的内容是解引用操作,则decltype得到引用类型

decltype((x)) d=y;//d是x的引用类型

decltype(x) d;//只有当x本身是引用类型,d才是引用类型

命名空间的声明

using namespace::name;

using namespace space_name;

头文件不应该包含using声明,避免包含此文件的源文件和using声明的名字冲突

标准库string类型

可变长字符序列 

#include

using std::string;

基础_第4张图片
string初始化
基础_第5张图片
string操作

从流中读取时会忽略空白字符(空格符,换行符,制表符等)

getline从流中读取一行,遇到换行符为止(换行符也读进来了),但换行符不会存到对象中。

string::size_type,类中定义的类型,无符号,可存下任何string对象的大小,可使用auto或decltype推断。

字面值和string对象相加,必须确保运算符两侧至少一个是string对象。字符串字面值不是string类型。

[]返回的是某位置上字符的引用。

#include

基础_第6张图片
处理string的字符方法

基于范围的for循环

for (declaration : expression){

statement

}

标准库类型vector

#include

using std::vector;

基础_第7张图片
vector初始化

vector::size_type

你可能感兴趣的:(基础)