程序语句


语句

C++中,我们经常使用 函数语句
函数相当于一个包装,而语句就是包装里的礼品,语句作为 C++ 中最小的指令结尾,一般都需要以 ; 结尾,如之前的HelloWorld程序

cout << "Hello World";

常用的语句类型

常用的语句类型如下:

  • 声明语句
  • 表达式语句
  • 跳转语句
  • 复合语句
  • 选择语句
  • 迭代语句
  • 异常捕获块
// 声明语句
int n = 1;

// 表达式语句
n = n + 1;
std::cout<< "n = " << n << std::endl;

// 跳转语句
mylabel:
	cout << n << ", ";
	n--;
	if (n > 0) goto mylabel;

// 复合语句
{ 语句1; 语句2; 语句3 }

// 选择语句
if (x == 100) cout << "x is 100";

// 迭代语句
while (n > 0) {
	cout << n << ", ";
	--n;
}

// 异常捕获块
try
{
	throw 20;
}
catch (int e)
{
	cout << "An exection occured. Exception Nr. " << e << "\n";
}

函数

函数 是将一系列 语句 聚合在一起的结合体。执行时,将会按照顺序执行语句。
使用函数,也可以说是执行一系列的语句

没有使用函数前

int main()
{
	// 执行两遍
	int a = 10;
	int b = a + 1;
	cout << "test say " << a << "\t" << b << "\n";
	
	a = 10;
	b = a + 1;
	cout << "test say " << a << "\t" << b << "\n";
	return 0;
}

使用函数后

void test() 
{
	int a = 10;
	int b = a + 1;
	cout << "test say " << a << "\t" << b << "\n";
}

int main()
{
	// 执行两遍
	test();
	test();
	return 0;
}

main函数

[!NOTE] 什么是main函数?
每个程序中,都有一个入口程序,也就是main函数,程序将从这个函数开始顺序执行

int main()
{
	return 0;
}

一般来说,main函数都会 return 0;,函数的返回值后面再说,这个语句的主要作用急速告诉计算机,该程序正确执行。

  • 如果 return -1; 呢?
    • 表示程序未正确运行

HelloWorld程序拆解

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}
  1. #include <iostream>:表示需要使用 iostream
    1. iostream是C++提供给命令行读写的标准库。
    2. std::xxx就是使用了 iostream 中的功能
  2. int main():程序入口

我们可以使用 using namespace 代替手动输入 std::xxx

#include <iostream>

using namespace std;

int main()
{
	cout << "Hello World!" << endl;
	return 0;
}

注释


使用 // 或 其他特殊符号标记的语句,该语句将不会被编译器识别。

单行注释

使用 // 表示

// 注释
cout << "Hello World"; // 注释内容

多行注释

就是 /**/ 之间的内容,将会被视为注释语句。

/*  多行注释
	多行注释
	多行注释*/

为了美观,也可以加上 *

/* 多行注释
 * 注释1
 * 注释2
 */

[!NOTE] tips
一般在IDE中,我们可以使用 ctrl + / 来快速注释一段或多段代码

变量


关于变量:3.变量
变量是程序在内存中申请的一块用来存放数据的空间

为了创建变量,使用一种特殊的声明语句,称为定义,如:

int x; // 定义了一个类型为int的变量x

数据类型

如上,定义变量时,我们需要指定类型,为什么呢?
因为C++是一个强类型的语言,如果是javascript的话,定义就使用变量定义就可以了,而不需要指定类型

let x;

变量初始化

有了数据类型,当然需要存入一个具体值,那么我们之前的声明中,都是 int xxx;,这样也是初始化。

int x; // 定义了一个类型为int的变量x,并初始化值为0
int y, z; // 定义了两个变量为 int 的变量x和y,并初始化值为0

那么默认值,我们是否可以自己修改呢?
这种操作,我们称为赋值。

拷贝赋值

默认情况下,我们将 = 右边的值复制给左边的变量,这种赋值方式称为拷贝赋值。

#inclue <iostream>

int main()
{
	int width;
	width = 5; // 将值 5 拷贝赋值给变量 width;
	std::cout << width << " " << std::endl;
	return 0;
}

初始化

赋值不仅可以修改已创建变量的值,还可以为变量初始化默认值。

C++提供了6种变量的初始化方式:

int a; // 默认初始化
int b = 5; // 拷贝初始化
int c( 6 ); // 直接初始化

// 列表初始化
int d { 7 }; // 直接列表初始化
int e = { 8 }; // 拷贝列表初始化
int f {}; // 值列表初始化
默认初始化

C++根据类型,自动赋予变量默认值,如int 默认为0;

拷贝初始化

= 后直接写初始值,成为拷贝初始化。

int width = 5; // 将 5 拷贝初始化,设置到变量width
直接初始化

在括号内提供初始设定值,这被称为直接初始化。

int width( 5 );

直接初始化基本被列表初始化代替,列表初始化有一些奇怪的特性,因此直接初始化在某些情况下再次应用。

列表初始化

C++中初始化对象的方法,利用 {} 初始化,这被称为列表初始化

列表初始化有三种形式:

int width { 5 }; // 直接列表初始化,将变量width设置为5
int height = { 6 }; // 拷贝列表初始化,将变量height设置为6
int depth {}; // 值初始化

如上,将具有小数部分(.5部分)的数字(4.5)分配给整数变量(只能容纳没有小数部分的数字)。

拷贝和直接初始化只会删除小数部分,而将值4初始化到变量width(编译器会发出警告,因为很少需要丢失数据)。然而,列表初始化时,编译器将生成错误,迫使纠正问题。

cout、cin和endl简介


HelloWorld中,我们将 “Hello World”输出到了控制台,这用到了iostream的标准输入/输出

输入/输出库

输入/输出库(iostream库)是C++标准库中处理基本输入输出的一部分。
使用该库的功能可以实现与控制台获取键盘输入,以及输出内容到控制台。

想要使用 iostream,你需要在代码顶部引入对应的头文件

#include <iostream>

// 后续代码

std::cout

std:表示 standard(标准),我们想要使用标准输入/输出,语法应该如下

std::xxx;

cout:其中 c 全称是 console,cout就是 character out 字符输出。属于标准库中的,因此要按如下格式:

std::cout;

<<:插入操作符,可以将右侧的文本指向左侧的输出函数,组合使用输出语句就是:

std::cout << "Hello World";

std::endl

endl:全称为 end line,也就是换行。

#include<iostream>

using namespace std;

int main() {
	cout << "没有使用换行...";
	cout << "输出2";
	cout << "     我的下一行将会换行" << endl;
	cout << "我换了!";
	return 0;
}

没有使用换行...输出2 我的下一行将会换行
我换了!

std::endl vs “\n”

相比于输出"\n"换行,用std::endl有点低效。因为它实际上执行两项工作:将光标移动到控制台的下一行,并刷新缓冲区。当文本写入控制台时,通常不会刷新每行末尾的缓冲区。系统定期刷新更有效。

因此,首选用"\n"字符。"\n"字符将光标移动到控制台下一行,但不刷新缓冲区。

std::cin

std:∶cin(代表字符输入, character input)使用提取操作符(»)从键盘读取输入。输入存储在变量中。

#include<iostream>

using namespace std;

int main() {
	cout << "Enter a number: ";
	int x {};
	cin >> x;
	
	cout << "You entered " << x << "\n";
	return 0;
}

标识符与关键字


标识符的概念可以参考大部分的编程语言,如:python

关键字,也就是C++的内置的单词,你不能用这些关键字来声明变量等,关键字大概如下表:

asmelsenewthis
autoenumoperatorthrow
boolexplicitprivatetrue
breakexportprotectedtry
caseexternpublictypedef
catchfalseregistertypeid
charfloatreinterpret_casttypename
classforreturnunion
constfriendshortunsigned
const_castgotosignedusing
continueifsizeofvirtual
defaultinlinestaticvoid
deleteintstatic_castvolatile
dolongstructwchar_t
doublemutableswitchwhile
dynamic_castnamespacetemplate

字面值和操作符


字面值

std::cout << "Hello World";
int x { 5 };
  • 其中 "Hello World" 和 5 都是字面值
    • 字面值,又称为常量,是源代码中的固定值。

操作符

也就是数学中的 + - * /,以及一些逻辑相关的操作符

加法(+)、减法(-)、乘法(*)和除法(/)。在C++中,赋值(=)也是操作符,插入(«)、提取(»)和相等(==)也是操作符。虽然大多数操作符的名称都有符号(例如+、或==