变量和基本类型
转义字符:
变量初始化
当定义变量时没有指定初值,则变量被默认初始化。
-
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。当定义于函数之外时,变量被初始化为0,当定义在函数体内部是,变量将不被初始化,此时对其进行访问会引发错误。
-
绝大多数类都支持无须显式初始化而定义对象,并且提供了一个合适的默认值。
变量声明与定义
变量声明只是使得别处定义的变量使得程序所知。
extern int i; //声明i而非定义i
int j;/声明并定义j
变量命名规范
-
标识符要体现实际含义;
-
变量名一般用小写字母,如index;
-
用户自定义的类名一般以大写字母开头,如Sales_item;
-
如果标识符由多个单词组成,则单词间要有明显区分如student_loan或studentLoan。
复合类型
引用:引用为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型。引用必须初始化。
指针:实现了对其他对象的间接访问。
- 指针本身就是一个对象,允许对指针进行赋值和拷贝,且在生命周期内可以先后指向不同的对象。
- 指针无需在定义时赋值,若在块作用域内没初始化,也将拥有一个不确定的值。
int *ip1,*ip2;
double dp,*dp2;//dp是double型对象,dp2是指向double型对象的指针
- 获取对象的地址:获取地址时需使用取地址符。
int ival=42;
int *p=&ival; //p存放变量ival的地址。
- 指针的值(即地址)应属下列4种状态之一:
- 指向一个对象
- 指向紧邻对象所占空间的下一个位置
- 空指针
- 无效指针
- void* 指针:特殊的指针类型,可以存放任意对象的地址。
- 指针常量:指向常量的指针,
const int *cptr=&pi
。可以指向常量和非常量,但是不能通过该指针去修改所指变量的值。 底层const。 - 常量指针:常量指针把自身定为常量,必须初始化,初始化后它所指向的值(即地址)就不能再改变。
int *const cur = &Numb
。可以通过常量指针去修改所指对象的值。 顶层const
constexpr和常量表达式
常量表达式是指:值不会改变且在编译过程中就有结果的表达式,字面值也属于表达式。但const int sz = get_size()
不是常量表达式,因为sz需要在程序函数运行后才有具体的值。
在复杂的程序中比较难分辨一个初始值是否为常量表达式。在C++11的标准中规定,可以将变量声明为constexpr类型来验证变量是否为常量表达式。
处理类型
使用别名对
类型进行声明:别名声明。
1.typedef double wages;
2.using SI = Sales_item;
auto类型
auto类型让编译器去分析表达式的类型,并将变量定义为该类型。
decltype类型
decltype从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。
自定义数据结构
自定义类可以用关键字struct来实现。
struct 类名{
类体(数据成员,并且可以为数据成员提供类内初始值)
};
预处理器:在编译之前,可以把一些预处理功能例如:#include所指定的头文件加载到程序中。除此之外还有头文件保护符,可以根据预处理变量(已定义和未定义)来进行。
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_Data{
std::String bookNo;
unsigned units_sold=0;
double revenue=0.0;
};
#endif