The Foundation of C++ —— 基于《C++ Primer》的笔记Ⅰ

笔记内容基于C++Primer(第5版),使用C++11标准

因笔者为初学者,故内容不会面面俱到

若有表述错误还望直接指出

——2021.7

根据C++ Primer的内容,笔记将会分为四篇内容:

  • C++ 基础
  • C++ 标准库
  • 类设计
  • 其他C++工具

Important Prerequisites

编写一个程序:

  • 定义变量
  • 进行Input Output
  • 使用数据结构保存与读取数据
  • 处理数据内容

现在,我们从一个简单的C++程序开始认识他

每个C++程序都会包含1+个函数(function),其中规定main函数是被操作系统首先调用运行程序的主函数。下面是最最简单的(啥也干不了的)main函数示例。

int main(){
  return 0;
}

在此,我们说明一下:
  C++中语句以分号作为结束标记;
  "//“表示该行剩余内容为注释,不会影响程序的编译与运行;
  函数名前需声明函数类型,此处示例为"int”,则"return"后的返回值必须是"int"类型(后续会谈及数据类型);
  返回值"0"表示程序运行成功,非零值会具体定义,表示不同的错误类型。

编译与运行C++

程序的编译运行过程与OS和编译器相关,具体可以学学《编译原理》
首先我们需要讲源代码放在源文件(source file)中,一般源文件后缀有:.cc、.cxx、.cpp、.cp、.c
以G++编译器为例子:在控制台执行命令编译程序源文件

g++ -std=c++11 first.cpp -o first

其中

变量

内置类型

整型、字符、布尔和浮点型

类型含义最小尺寸
bool布尔类型
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整型16位
int整型16位
long长整型32位
long long长整型64位
float单精度浮点数6位有效数字
double双精度浮点数10位有效数字
long double扩展精度浮点数10位有效数字

⭐基本字符类型char单位空间应确保存放机器基本字符集中任意字符对应的数字值:单位大小应等于机器字节大小
⭐规定:一个 int ≥ 一个 short ;一个 long ≥ 一个 int;一个 long long ≥ 一个 long
除了布尔型、扩展字符型,整型可以被划分为有符号signed,无符号unsigned两类

字面值常量(literal)

Int & Float:

20          // decimal/integer
024         // octal
0x3b        // Hexadecimal
20u         // unsigned integer
2000l       // long integer
20ul        // unsigned long integer
3.14159     // float
0.3141e1    // float/scientific notation
u8"H"       // utf-8 char
u"H"        // unicode char16_t
U"hello"    // unicode char32_t

Characters and Strings:

'a'         // Character
"abcdefg"   // string

Escape Character:

"\\"      // \ character
"\'"      // 'character 
"\""      // "character
"\?"      // ? Character
"\a"      // ringtone
"\b"      // backspace
"\f"      // change page
"\n"      // Newline
"\r"      // Enter
"\t"      // horizontal tab
"\v"      // vertical tab
"\564"    // An octal number from one to three digits
"\x4f"    // Hexadecimal number of one or more digits

变量

variable,提供一个具名的、可供程序操作的储存空间。对C++来说,变量和对象可互换使用。

<type> <variable_list>; //声明并定义变量
extern <type> <variable_list>; //声明非变量

命名规范:

  • 体现实际含义
  • 变量名小写字母
  • 类名大写开头 e.g. College_student
  • 多单词组成的标识符,需要有区分(下划线或驼峰法)

复合类型

e.g. 引用,指针

  • 使用&进行引用,绑定两个值;声明引用必须初始化。
int ival = 1024;
int &refVal = ival;

⭐引用即是别名

  • 指针的值一般是一个地址(或为空)
#include<iostream>

using namespace std;
int main(void){
    int ival = 1024;
    int *refVal = &ival;
    cout << refVal << endl << *refVal;
    return 0;
}

OUTPUT:

0x61fe14
1024

emmm~~~好绕啊 来整理一下

int i = 1024;   //定义i
int &r = i;     //表示r是一个引用
int *p;         //表示p是一个指针
p = &i;         //取地址符
*p = i;         //解引用符
int &r2 = *p;   //表应用;解引用符

int **ppi = &p; //指向指针的指针
int *&ref = p;  //指针的引用
// 面对关于引用和指针的复杂语句,可以从右往左阅读,便于理解其含义

const 限定符

定义变量时加上前缀const限定一个变量的值为不可改变的,方便调整程序全域中某个值的大小,同时防止程序运行中改变值大小。
⭐对常量的引用:

const int i = 1024;
const int &r = i;   //√
int &r = i;         //×

另外:

int i = 1024;
int &r1 = i;        //可通过改变r1修改i的值
const int &r2 = i;  //不可通过改变r2修改i的值

同理:
指向常量的指针(pointer to const)不能用于改变该常量的值;
常量指针(const pointer)不能改变指向对象;
指向常量的常量指针(const pointer to const)不能改变指向对象也不能改变指向常量的值;

int val = 1024;                 //变量
const int cval = 1000;          //常量
const int *ptrc = &cval;        //指向常量的指针
int *const cptr = &val;         //常量指针
const int *const cptrc = &cval; //指向常量的常量指针
*cval = 10;         //不能改指向常量的值
ptrc = &val;        //能改变指向的常量
*ptrc = 10;         //不能改指向常量的值
cptr = &cval;       //不能改变指向的常量
*cptr = 10;         //能改指向常量的值
cptrc = &val;       //不能改变指向的常量
*cptrc = 10;        //不能改指向常量的值


总结一下子——其实还是:
面对复杂语句,可以从右往左阅读,便于理解其含义

可以看出来,const所处的位置代表了指向一个常量还是常量引用

处理类型

  • 类型别名(type alias)
    typedef <typename> <custom_typename>;表示用自定义的名字表示默认数据类型,便于清楚该类型的用途,且该定义方式时刻传递的即:typedef <custom_typename1> <custom_typename2>
    C++ 11中有了新的定义别名的方式:

using <custom_typename> = <typename>;

自定义数据结构

字符串、向量、数组

命名空间 using 声明

标准库类型

string
vector

迭代器

数组

表达式

表达式由运算对象(operand)组成,对其求值得到一个结果。字面值和变量是最简单的表达式。
作用于一个运算对象的运算符是一元运算符(unary operator);
作用于两个运算对象的运算符是二元运算符(binary operator);
作用于三个运算对象的运算符是三元运算符(仅一个);
函数调用也是特殊的运算符,对象数量没有限制。

  • 复杂的表达式中,运算符符合一定的优先级(precedence)、结合律(associativity)、求值顺序(order of evaluation)
  • 表达式求值的过程会伴随数据类型的转换,通常:小整数类型会被提升为较大整数类型(主要为int);指针不能转换为浮点数

未完(2021.9)

语句

函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值