C++ | 初始化
初始化与赋值的区别
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。
常见初始化方法
1234int units_sold = 0;int units_sold = {0};int units_sold(0);int units_sold{0};
默认初始化
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型变量将不被初始化
建议初始化每一个内置类型的变量。
C++ | 常量表达式
定义
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
例如:
1234const int max_files = 20; // max_files是常量表达式const int limit = max_files + 1; // limit是常量表达式int staff_size = 27; // staff_size不是常量表达式const int sz = get_size(); // sz不是常量表达式
constexpr
C++新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。
一般来说,如果认为一个变量是一个常量表达式,那就把它声明成constexpr类型。
C++ | 表达式基础
基本概念
C++定义了一元运算符(unary operator)和二元运算符(binary operator)。作用于一个运算对象的运算符是一元运算符,如取地址符(&) 和解引用符();作用于两个运算对象的运算符是二元运算符,如相等运算符(==)和乘法运算符()。 除此之外,还有一个作用于三个运算对象的三元运算符。函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。
递增与递减运算符
123int i = 0, j;j = ++i; // j = 1, i = 1; 前置版本 得到递增后的值j = i++; // j = 1, i = 2; 后置版本 得到递增前的值
建议:除非必须,否则不用递增递减运算符的后置版本
PS: *pbeg++等价于*(pbeg++)
条件运算符
cond? expr1: expr2;
其中cond是判断条件的表达式,而expr1和expr2是两个类型相同或可能转换为某个公共类型的表达式。条件运算符的执行过程是:首先求cond的值,如果条件为真对expr1求值并返回该值,否则对expr2 求值并返回该值。举个例子 ...
C++ | vector类型
标准库类型vector表示对象的集合,其中所有对象的类型都相同。
引入
12#include <vector>using namespcae std;
vector 是模板而非类型,由vector生成的类型必须包含vector中元素的类型
12vector<int> ivec; // ivec保存int类型的对象vector<Sales_item> Sales_vec; // 保存Sales_item类型的对象
某些编译器可能需要vector<vector<int> >来定义vector的元素还是vector的场景。
定义和初始化vector对象
1234567vector<T> v1;vector<T> v2(v1);vector<T> v2 = v1;vector<T> v3(n, val);vector<T> v4(n);vector<T> v5{a, b, c...};vector< ...
C++ | string类型
引入
使用string类型必须首先包含string头文件,同时作为标准库的一部分,string定义在命名空间std中。
12#include <string>using namespace std;
定义与初始化
分为直接初始化与拷贝初始化顾名思义
1234string s1;string s2 = s1;string s3 = "hiya";string s4(10, 'c'); //10个c
读取位置数量的string对象
1234567int main(){ string word; while (cin >> word) cout << word << endl; return 0;}
使用getline读取一整行
getline()函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来),然后把所读的内容存入到那个string对象中去(注意不存换行符)。
1234567int ...
C++ | const限定符
背景
我们想定义一种变量,它的值不能被改变。
1const int bufSize = 512;
const对象一旦创建后,其值就不能再改变,所以const对象必须初始化。
如何跨文件
file_1.cpp
1extern const int bufSize = fcn(); // 定义并初始化
file_1.h
1extern const int bufSize;
如果想在多个文件间共享const对象,必须在变量的定义之前添加extern关键字。
const的引用
1234const int ci = 1024;const int &r1 = ci; // 正确:引用及其对应的对象都是常量;r1 = 42 // 错误:r1是对变量的引用int &r2 = ci // 错误:试图让一个非变量引用指向一个常量对象
常量引用是对const的引用
const 指针
允许将指针本身定为常量即常量指针,常量指针必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了。
1234int errNu ...