C++ 第一个程序、注释、常量(c++程序总是从第一个定义的函数开始执行)

目录

  1. 第一个程序
  2. 什么是注释?
  3. 什么是常量?

第一个程序

蛇年开始了,要学习了,启动,学习第1章,先来碰碰C家家,不要问我为什么学C++

几乎所有的编程语言都是从Hello World!开始的,万年不变,甭管你是java还是python,python今年应该会比较火一点,因为蛇年,匹配python的运

废话不多说,直接上第一段代码

#include <iostream>
int main()
{
    std::cout << "Hello World!<<std::endl";
}

运行结果如下:

运行结果大家肯定都知道,但是让我们来逐行分析一下代码

  • #include <iostream>:这行代码表示引入 C++自带的 iostream头文件,iostream这个头文件是干啥用的呢,是用来提供标准输入输出流的库,打个比方说,比如你要去砍树,这个时候C++说,这里直接提供了一堆工具,有锯子、有斧头,你不用自己造,拿过去就能用,这个#include <iostream>就是把工具拿过来的作用
  • int main,这个C++程序的入口函数,也就是说程序是从这个函数开始的,在C++程序中,只能有一个入口,main()函数是程序的唯一入口,程序从这里开始执行,并且最终在main()函数的结束处停止,关于函数的概念,我们后面细说,这里按下暂且不表。
  • std::cout << "Hello World!<<std::endl:std::cout,这个就是我们上面引入的iostream头文件库里面的一个工具,用来输出内容到控制台,std::endl用于输出流中插入一个换行符并刷新缓存区,确保所有待输出的内容都被立即写入目标设备。这个::我们称之为作用域解析运算符,说到作用域就要提到命名空间,这里我们简单的代入一下,举个生活的例子 比如班级里有两个同学,都叫张三,老师点名的时候,喊张三你来回答问题,这个时候会有个什么情况,两个张三很懵啊,到底是哪个张三啊,分不清啊,这个时候怎么办,把学生分成不同的组,两个张三分在不同的组里,这个组就相当于一个命名空间,此时老师叫一组的张三,这样就确定唯一性。
  • <<:这个符号为插入运算符,属于 C++ 标准库的功能,当然这个符号还有另一种功能就是位左移运算符这里暂且不表述,后续再细说。

什么是注释?

我们先了解一下注释的概念,什么叫注释呢就是对代码的解释,比如你写了一行代码,然后写上说明,说明这行代码是干啥的,注释是不影响代码的执行,是给人看的,不是给计算机看的,不写也不影响啥,代码要是过长,逻辑过于复杂,不写注释,别人接手了,那估计要骂娘了,C++的注释一般分为三种

  • 单行注释:单行注释,//开头一行写完,不能换行
  • 多行注释:多行注释,/*开头,*/结尾,中间内容可以换行,示例如下:
#include <iostream>
/*
多行注释
date: 2021-08-10
author: MagicYang
description: 输出Hello World!
*/

int main()
{
    // 单行注释,输出Hello World!
    std::cout << "Hello World!<<std::endl";
}
  • 条件注释:所谓条件注释就是,如果满足条件了(1),就执行,没有满足条件(0)就不执行,就相当于是被注释掉了,条件注释的格式如下:
#if 0
    // 这里是一些暂时不需要的代码
    std::cout << "暂时不执行的代码";
#endif

我们来看个示例代码:

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
#if 0
    std::cout<<"打印我啊"<<std::endl;
#endif
}

运行结果如下:

如果我们将其改成 1 或者是一个满足条件的表达式,此时下面的雨具就能打印出来了,示例代码如下:

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
#if 3>2
    std::cout<<"打印我啊"<<std::endl;
#endif
}

是不是很神奇

什么是常量?

常量是指在程序运行期间其值不可改变的变量,常量可以是任何的基本数据类型,比如整型、浮点型、字符型也可以是指针、引用类型等。定义常量的常见四种方式:

const关键字定义

定义的语法如下:const 数据类型 常量名=常量值,常量的名一般使用大写,这是规范,不是语法的定义,不要问为什么,问就是王八的屁股-龟腚,

constexpr关键字定义

该关键字c++ 11后才能使用,定义的语法如下:constexpr 数据类型 常量名=常量值

define 预处理指令定义

预处理指令定义的语法如下:#define 常量名 常量值,注意,使用预处理指令定义,结尾不需要加分号。

下面看个示例代码:

#include <iostream>

int main()
{
 const int ONE = 1;
 std::cout << "ONE = " << ONE << std::endl;
 constexpr int TWO = 2;
 std::cout << "TWO = " << TWO << std::endl;
 #define THREE 100 
 std::cout<< "THREE = " << THREE << std::endl;
}

运行结果如下:

这个一定有人有疑问了,这些都能定义常量,那有什么不同呢,看如下表格:

特点 const constexpr #define 计算阶段 编译时或运行时 编译时 预处理阶段 类型安全 是 是 否 作用域 局部、全局、类成员 局部、全局、类成员 全局 存储 内存中分配空间 编译时计算,通常不分配空间 不分配空间 可修改性 不可修改 不可修改 可重新定义 性能 可能有运行时开销 无运行时开销 无运行时开销 适用场景 运行时或编译时常量 编译时常量 编译时常量

这里我们解释一下什么是编译时,什么是运行时。编译时是指将源代码转换为可执行代码的过程,就是要将c++代码翻译成机器能够识别的机器语言(因为计算机的最底层的硬件层面确实只能识别0和1),并且在这个过程中,编译器会检查语法错误、类型错误等,并在编译阶段报错,避免程序运行时出现这些错误;运行时是指程序被加载到计算机内存中并开始执行的阶段,举个例子:编译时就是检查一下摩托车,有没有油,发动机等等是否正常,如果没有就给你直接撂摊子,让你去修,运行时,就是一切检查完毕,钥匙一查,油门一踩,启动上路。

枚举

什么叫枚举,枚举是一种用户自定义的数据类型,用于定义一组命名的整数值,简单的说有些东西的值是固定的,就正常就那么几个值,比如:一周七天(周一到周日)、正常的性别(男女两种)、常规颜色(红橙黄绿青蓝紫)这些固定的,这些我们就可以定义成枚举,供后面方便使用。枚举分为如下两种类型:

  • 传统枚举:语法如下:
enum 枚举名 {
    枚举值1,
    枚举值2,
    枚举值3,
    ...
};

示例代码如下:

#include <iostream>
// 定义一个枚举
enum Weekday {
 Sunday,
 Monday,
 Tuesday,
 Wednesday,
 Thursday,
 Friday,
 Saturday
};

int main()
{
 // 输出枚举值
 std::cout << "Monday = " << Weekday::Monday << std::endl;
}

运行结果如下:

看到结果,此时你可能有点疑问,为啥子结果是1呢

那就让智慧光辉的我来告诉你吧,传统枚举的值可以隐式转换为整数,也就是枚举值可以转换成整数类型,从0开始依次递增1,sunday 就是0,Monday就是1,依次类推,Saturday就是6。

当然Monday也不一定非得是1,也可以是15,我们可以指定,枚举之间的值可以一样,如果你指定了Monday为15,但是没有指定后面的Tuesday值,那么Tuesday值的值就是在Monday的后面递增1,就是16,示例代码如下:

// 定义一个枚举
enum Weekday {
 Sunday,
 Monday=15,
 Tuesday,
 Wednesday = 16,
 Thursday,
 Friday,
 Saturday
};
int main()
{
 // 输出枚举值
 std::cout << "Monday = " << Weekday::Monday << std::endl;
 std::cout << "Tuesday = " << Weekday::Tuesday << std::endl;
 std::cout << "Wednesday = " << Weekday::Wednesday << std::endl;
}

运行结果如下:

  • 强类型枚举(c++ 11后引入)
enum class/struct 枚举名 {
    枚举值1,
    枚举值2,
    枚举值3,
    ...
};

强枚举类型与传统的枚举类型不同的是,强类型枚举的值不能隐式转换为整数,但是还是可以显示赋值的,此外强枚举类型的枚举值需要通过枚举名来访问,不能直接使用枚举值访问,示例代码如下:

#include <iostream>
// 定义一个枚举
enum struct Weekday {
 Sunday,
 Monday=15,
 Tuesday,
 Wednesday=15,
 Thursday,
 Friday,
 Saturday
};
int main()
{
 // 输出枚举值
 std::cout << "Monday = Wednesday" << (Weekday::Monday==Weekday::Wednesday) << std::endl;
 std::cout << "Monday = Wednesday" << (Weekday::Monday == Weekday::Tuesday) << std::endl;
}

运行结果如下:

结尾

OK,本期就到这里,下期见,不足的地方还请多多指教,我胡汉三又回来了,公众号恢复日常更新,欢迎一起交流学习。