
C++入门——2. C++基础知识
程序语句
语句
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;
}
#include <iostream>
:表示需要使用 iostream 库- iostream是C++提供给命令行读写的标准库。
- std::xxx就是使用了 iostream 中的功能
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++的内置的单词,你不能用这些关键字来声明变量等,关键字大概如下表:
asm | else | new | this |
---|---|---|---|
auto | enum | operator | throw |
bool | explicit | private | true |
break | export | protected | try |
case | extern | public | typedef |
catch | false | register | typeid |
char | float | reinterpret_cast | typename |
class | for | return | union |
const | friend | short | unsigned |
const_cast | goto | signed | using |
continue | if | sizeof | virtual |
default | inline | static | void |
delete | int | static_cast | volatile |
do | long | struct | wchar_t |
double | mutable | switch | while |
dynamic_cast | namespace | template |
字面值和操作符
字面值
std::cout << "Hello World";
int x { 5 };
- 其中 "Hello World" 和 5 都是字面值。
- 字面值,又称为常量,是源代码中的固定值。
操作符
也就是数学中的 + - * /
,以及一些逻辑相关的操作符
加法(+)、减法(-)、乘法(*
)和除法(/)。在C++中,赋值(=)也是操作符,插入(«)、提取(»)和相等(==
)也是操作符。虽然大多数操作符的名称都有符号(例如+、或==
)
- 感谢你赐予我前进的力量