C++语句篇(一)

提示:本文内容是C++语法,且比较基础、不够全面


前言

C++有很多种语句,但是很多人只会用,不懂其结构和逻辑。
通过这篇文中,你可以更加熟悉你所写的每一句代码,也有助于初学者理解语法逻辑。


一、分类

int main()
{
	int n = 1;							// 声明语句
	std::cout << "n = " << n << endl;   // 表达式语句
	return 0;							// 返回语句
}

上面标出了三种语句,声明语句、表达式语句、返回语句。
C++中一共有9种语句,分别是:

  1. 声明语句
  2. 表达式语句
  3. 循环语句
  4. 选择语句
  5. 带标号语句
  6. 复合语句
  7. try 块
  8. 跳转语句
  9. atomic 与 synchronized 块

下面详细讲解声明语句、表达式语句、循环语句、选择语句、复合语句。


二、声明语句

声明:是指将名字引入C++程序中。
定义:是一种声明。是指足以使该名称所代表的东西被使用的声明。

1. 声明

int n;		    // 这是声明
int n = 10;     // 这是定义

void func();	// 这是声明
void func() {};	// 这是定义

2. 重声明

一般的情况下的重声明是不被允许的。

int main()
{
	int n;  // OK
	int n = 10;  // 错误:重定义(重声明)
	return 0;
}

3. 函数的重载

一个函数可以接收很多种形式的形参,这就用到重载。
重载是指在作用域内声明已经声明过的、具有相同名称的函数或方法(成员函数)。
重载也是一种声明。

void func(int a) {} // (1)
void func(double b) {} // (2)
void func(string a, pair<int, int> b) {} // (3)

int main()
{
	func(1); // 调用(1)
	func(1.5); // 调用(2)
	func("123", { 1, 2 }); // 调用(3)
	return 0;
}

二、表达式语句

故名思意,就是表达式后面跟上一个分号,形成一条语句。
以下语句是表达式语句:

int main()
{
	int a;
	a = 10; // 赋值语句是表达式语句

	auto func = []{}; // 这是lambda表达式的声明语句
	func(); // 函数调用是表达式语句

	1 + 1; // 1 + 1 是运算表达式,这是表达式语句

	cout << 1; // cout << 1 是运算表达式,这是表达式语句
	// 解释:
	// cout 是内置的一个对象,
	// 它重载了<<的行为,用来输出,
	// 而不是二进制向左位移。
	// 它的返回结果是一个与cout类型相同的对象(ostream)。
	// 这也就说明了一串的cout(如cout<<1<<2<<endl;)是合理的。

	while (1) 
	{
		// 循环体内部是空语句,即没有表达式的表达式语句
	}
	; // 这也是空语句
	return 0;
}

大部分语句都是表达式语句。


三、循环语句

循环语句可以重复执行一些代码。

1. while循环与do-while循环

while(条件)语句
do 语句 while(条件);

若条件成立,则会循环。
如你所见,while语句先判断条件是否成立,再执行代码;do-while语句先执行代码,再判断条件。
while循环体中的语句作用域仅在while的循环体中。
可以使用break跳出本层循环、使用continue跳过本次循环到下一次循环。

breakcontinue都是单独的一条语句,它们是跳转语句。

2. for循环

for(初始化语句; 条件(可选); 表达式(可选)) 语句

初始化语句可以是表达式语句、简单声明(可以同时声明多个变量,用逗号连接声明语句)等。
通常情况下,初始化语句中定义循环计数器而表达式通常是增加循环计数器的表达式。
for语句等价于下面的while语句

{
	初始化语句
	while (条件)
	{
		语句
		表达式;
	}
}

可以使用break结束本层循环、使用continue跳过本次循环到下一次循环。
while相同,在for循环体中的语句作用域仅在for的循环体中。
使用for时注意几点(不同于上面的while):

  1. 空条件等价于true(上面的while循环中写空语句会报错)。
  2. 语句中执行continue表达式会求值(上面的while循环写continue不会求值)。
  3. 初始化语句、条件、语句、表达式在同一作用域内。
for (int i = 1; i <= 10; i++)
{
	long i = 1; // 这在C++中是不允许的,因为初始化语句已经有i的定义,而循环体中的语句重定义了i。
} // 有趣的是,C中这是允许的(不展开讲原因)。

3. 范围for

范围for通常用来遍历容器中的所有元素(如:vectormap等),所以
范围for的格式如下:

for (初始化语句(可选) 项声明 : 范围初始化器) 语句

本人在C++模板基础一文中有提到
初始化器可以看作是要遍历的东西,可以是容器、数组等。
例:

for(auto i : {1, 2, 3}) std::cout << i << " ";

结果是:输出1 2 3
之后出一期专门讲范围for


四、选择语句

选择语句分为:

  1. if语句
  2. switch语句
  3. else子句的if语句
  4. consteval if 语句
  5. else 子句的 consteval if 语句

下面讲解第1、2种
switch语句讲在语句篇(二)中讲解

1. 一般if语句

if (条件) 语句

如果条件为true,则执行下面的语句

2. 带else子句的if语句

if (条件) 语句
else if (条件) 语句
else if (条件) 语句
...
else 语句

如果if中的条件为真,则执行if中的语句
否则,就到第二行的else if中继续判断,如果依旧不成立则继续往下
如果都不成立,则执行else中的语句
注意几点:

  1. 每个ifelse if 从上向下依次判断,最后再到else
  2. else if可选
  3. else可选
  4. if后跟的一整块到else是一整句选择语句
  5. 一个选择语句中只有一条会执行(看下面的例子)
int main()
{
	int n = 100;
	if (n >= 100) cout << 1 << endl;
	else if (n == 100) cout << 2 << endl;
	else cout << 3 << endl;
	return 0;
}

这段代码输出1,因为 n ≤ 100 n\leq 100 n100 已经成立,所以会执行if中的语句

int main()
{
	int n = 100;
	if (n >= 100) cout << 1 << endl;
	if (n == 100) cout << 2 << endl;
	// else cout << 3 << endl;
	return 0;
}

else if改为if,这段代码输出1 换行 2,因为每个if单独为一条选择语句,而两个if条件都成立,所以两条if中的语句都会执行。


五 、复合语句

就是多种语句混合在一起。
复合语句用花括号括起来。
每个复合语句都有其作用域。其中声明的变量在闭花括号处以逆序销毁。
下面是一个简单的复合语句

int n = 10;

if(n >= 10)
{
	cout << n << endl; // 表达式语句
	n = n - 1; // 表达式语句
}

可以看到if语句后面跟了一个复合语句,用花括号括了起来。这个复合语句中包含了两个表达式语句。

当需要一条语句,但要按顺序执行多条语句时(例如在 if 语句或循环中),可以使用复合语句


总结

这篇文章可以说是对于入门的同学们来说又太难了,对于都会的同学们又太简单了。我的本意是想写给会的那些同学的,所以这篇文章可以当作一个语法知识的小拓展,理解代码的结构。
当然还有语法篇二,我会讲解带标号语句(以及switch语句)和try块,这两种是不常见的语句。


参阅

https://zh.cppreference.com/w/cpp/language/statements

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值