欢迎光临散文网 会员登陆 & 注册

c++了解(?,简单解剖一下最初的helloworld输出程序。(闲的)

2023-08-27 00:31 作者:洛茨Deadcat  | 我要投稿

首先,贴一下上一个专栏的免责声明(主打一个懒

主要想说一点,我的专栏大多并不是为了系统学习的时候用作入门了解,只是想起什么东西就写点东西,主要是想用作和我以前一样非想深入学习的可以随便看看了解的程度。


直接先贴一下代码。应该每个刚入门的人都写过的一小段代码。

{#include<iostream>}:包含c++提供的标准输入输出流头文件。

{using namespace std;}:引入std命名空间

{int main(){}}:main函数本体(“{}”大部分人喜欢都换行,我个人习惯左花括号位于同一行);

{<<"Hello,world"}:可以简单理解为cout.opreator<<(),调用了一个函数,用来输出。

{cout}:c++的标准输出

{return 0;}:返回0

好,文章到这里就结束了,你可以退出了(bushi

真要是只这么说一下那就属于是知道的不用看,不知道的看不懂了。

所以下面简单介绍一下上面那一堆都是些啥。

一. 包含头文件

“ #include<> ”:

这个其实没什么太值得思考的,如果简单介绍他的话,它是一条预编译命令。作用就是他的英文单词的意思:“包含”。用于在你的cpp文件中包含另一个文件来做到可以在当前的cpp文件中调用被包含的文件的,变量,类,函数等等。被包含的那个文件一般叫做头文件,后缀一般为“.h”(但只是一般来说是.h,实际上包括cpp在内的几乎大部分文件,都可以被包含)。

“预编译指令”不需要理解,但可以试着百度看看。预编译的意思可以简单理解为编译器在最后运行程序之前会执行的。

“ iostream ”:

这个是c++提供的一个标准输入输出流的头文件。什么是输入输出流一开始不需要理解,后面会学,只需要知道他本质就是个文件,里面包含了一大堆人家已经给你写好的东西了。

PS:#include可以用作包含自己项目中写的资源性文件,但是在语法上需要改变:#include"path-spec"。(注:虽然一般不需要提醒,但还是提一嘴是英文引号)

值得注意的是,这里包含iostream头文件的主要作用只是为了调用后面的cout。大部分语句并不需要iostream头文件的内容,所以如果这段代码里删掉cout的输出语句,头文件也可以删掉。任何头文件都不是必须的,你可以需要什么包含什么,虽然像iostream这种头文件一开始会经常使用,但也不必任何文件中都进行包含。例:


这段代码可以正常运行


二. 使用std命名空间

对于这句其实相对复杂一些,但是也可以按照意思本身进行理解

“  namespace ”:

首先来看这一句,这一句整体来看的作用是使用命名空间。

先来看什么是命名空间(namespace):命名空间,命名一块空间。

举个例子:


test.h

这是一个写在test.h文件内的命名空间。他画出来一个区域,名字为N,在 “ {} ” 内的内容就是命名空间内的内容,它包含一个名字为var的int类型变量,并赋值为10。

(什么是变量,什么是int类型你可以自己了解一下)。

包含test.h可以这么写:#include"test.h"。在上面说过,用于在一个文件中包含另一个文件,尖括号变为冒号用于包含自己写的一些头文件。

看完例子,可能大概也理解命名空间了,那么回到namespace本身。namespace是命名空间的关键字,可以简单理解为告诉编译器这是一个命名空间。

值得注意的事,namespace有很多深入用法,包括:嵌套命名空间、内联命名空间、以及取别名等,建议自行了解。

“  using ”:

using,在c++using的用法很多,但在这里不过多介绍,只讲一下关于命名空间的最基础用法。using namespace “name”。对于这个用法可以和上面的include联想一下,作用就是直接引入命名空间的全部内容。

“ std ”:

在微软的c++文档中有这么一句话:

“所有 C++ 标准库类型和函数都在std命名空间或嵌套在std内的命名空间中进行声明。”

不需要深入了解,只需要明白你那些用#include<>包含的头文件当中的大部分东西都在名为std的命名空间里。

还没结束,关于命名空间的使用还有一些额外的东西需要进行补充:

在上面using那里我说过一句话using作用是引入命名空间的全部内容。但对于命名空间的使用不是所有时候都需要引入全部东西。相反,如果不是为了打比赛做题之类的在实际项目中反而不怎么直接在头文件下就引入某个命名空间(特别是std)的全部内容。因此有其他语法可供使用:

命名空间的名字+双冒号+实际内容。双冒号的作用是作用域解析。说人话可以简单理解为:访问声明的一些代码区域,命名空间、类等。

但在写一些大的项目的时候往往会出现一些对象,函数等会出现很多次,这时候,如果不用using namespace std;需要多写很多std::,因此可以有另一种语法:

using std::cout;

这么写可以只直接引入命名空间中的某个对象等。

三. 主函数:

对于主函数,由于本身本质就是一个函数。所以对这个的介绍就很容易牵扯到函数相关的内容。但是考虑到我写这篇专栏的面向对象。所以打算简单粗略介绍一下函数的内容:

函数: function,这个单词的另一个近似意思是功能,对于编程来说这个或许更好理解一些。

但其实,编程中的函数和数学中的函数是很相似的。(或者说就是演变过来的?)

直接列一个基础声明语法:

retype:返回数据的数据类型 (类型可以为void---无效的(就是没有))

function_name:函数名字

type:参数的数据类型

“ () ”:函数参数列表

arg:参数名字

( type arg 合起来就是需要传入的函数参数)

“ {} ”:函数内的主要代码

return:进行函数返回值的关键字

var:函数返回值


(返回数据的数据类型为void时,不需要返回值,也就是不需要return var)

这是一个函数的基本语法,不过多深入,只简单介绍一下:函数的主要作用的可以简单理解为把一段代码放入到一个区域内并给他命名。但是相比命名空间那种真正意义上的代码区域划分,函数更像是把代码实际打包成一个工具,在每次需要的时候使用(这个操作叫做函数调用)这块区域(也只有在调用的时候才会运行,不同于命名空间),以实现代码只写一次,但是可以使用无数次。也因此他不能像命名空间那样直接调用函数内的局部数据。

对于参数列表的作用:如果你的那一段函数(可以理解为工具)需要用来运算一些已有的数据(可以理解需要使用对象),那么就需要通过函数参数传入。(虽然一般不建议这么用,但是对于和函数位于相同作用域下的变量,只要声明在函数前面,就可以在函数内直接调用,不需要传入参数列表)

返回值:如果函数最后运算出了一个结果。由于函数的声明并不在函数被调用的地方,那么他的结果就没办法直接给出去,就需要通过return,返回出去。

例: 假设定义一个sum函数,作用为传入两个参数a和b,并返回a和b的和。

int a = sum(1,2);

那么这个的作用就是声明一个整型变量a,初始化为数值sum的和。

(刚入门函数可能无法好好理解,建议听听专业课程)

回到正题,简单来说int main(){return 0; }本质就是一个函数。是一个返回值为int,并且一般为0,参数列表为空的函数。只不过这个函数是在程序运行的时候会直接被编译器调用的函数,是程序的主要入口,也因此会被称为主函数(main)。

对于后期学到的各种语法,例如for,if,都需要写在主函数内。

四. 没什么好谈的是std::cout:

“ std::cout ”:

在iostream头文件中有cout对象的声明

(但关于什么是对象,以及这个声明不过多介绍)

实际上对于cout其实没必要过多介绍,不是因为没什么内容,cout内容挺多的,只是因为很长一段时间下,对于cout的使用也仅仅是一开始的这种简单使用。

所以直接挂一下语法:cout << content << ...;

最后想说的:

关于这个专栏,因为写的很急很快(出发前几个小时写出来的),所以恐怕错误会很多,欢迎指出。且这个专栏发出去之后的第二天(1点为新的一天)因为有些三次元事情,所以哪怕有评论我也看不到,也无法更改,所以建议直接在评论区进行详细的修改介绍(大概得半个多月之后才有可能上线)。

(不过肯定没人看,所以大概也不会有,但是还是打个甲)

c++了解(?,简单解剖一下最初的helloworld输出程序。(闲的)的评论 (共 条)

分享到微博请遵守国家法律