网站首页 > 技术文章 正文
我们先来看一段 C++的示例代码:
// my first cpp file
#include <iostream>
int main() {
using namespace std;
cout << "hellworld" << endl;
return 0;
}
这段代码虽然很短,但几个重要的要素都包含了,如果只是用来刷题,会发现基本上也只会用到这些语法。
我们一行一行来看。
注释
首先是第一行,第一行表示的 C++当中的注释。C 语言当中的/**/的多行注释方法同样支持,但为了避免潜在的问题,尽量使用 C++类型的注释。
include
第二行是预编译指令 include,这里的预编译指令是一个专业名词,表示在编译之前预先执行的指令。C++当中的预编译指令有好几种,除了 include 之外还有 define、if、undef 等等,我们后面遇到了再说。
include 这个指令会引入一个源代码文件,后面跟着的是一个包含文件名,也叫头文件名。C 语言中的头文件以.h 结尾,而 C++当中兼容了 C 语言的头文件,只不过将其重新命名,去掉了末尾的.h,而换成了 c 开头。比如 math.h 文件替换成了 cmath。
在这行代码当中我们 include 的头文件叫做 iostream,iostream 为 C++的标准输入输出库,用来在终端读入或者打印文本信息。iostream 可以拆开理解成 io 和 stream,其中 io 表示 input、output 即输入输出,stream 表示流,即使用流形式进行 io。
main 函数
main 函数是 C++程序的入口函数,C++标准当中定义的 main 函数类型是 int。返回 0 表示程序正常退出,所以一般我们要在 main 函数的最后写上 return 0。
C++的 main 函数通常有两种写法,一种是参数留空,一种是定义参数数量以及参数值。
int main() {}
int main(int argc, char* argv[]) {}
关于 main 函数的传参方法,以及参数使用方法同样会在之后介绍,初学者随便使用哪一种都是一样的。
注意,有些编译器比如 vc6.0 等没有严格遵循 C++ Primer 规范,导致支持 void 类型的 main 函数。建议放弃此类不规范的编译器,以免代码无法迁移,并且养成不好的编码习惯。
命名空间
命名空间是 C++当中的特性,用来解决大型项目名称冲突的问题。
有可能多个程序员同时开发了 getValue 函数,但当我们编译运行的时候,编译器无法知道我们究竟调用的是哪一个 getValue,所以需要使用命名空间进行区分。比如 A 程序员将 getValue 放入了名为 A 的命名空间当中,那么当我们调用 getValue 的时候就需要写成 A::getValue,B 程序员将它放入了名为 B 的命名空间中,同样调用的时候写成 B::getValue。
然而常用的许多函数、变量都明明在 std 的命名空间当中,这就意味着当我们使用这类内容的时候,都需要在前面加上 std::,比如标准输出的 cout 命令,需要写成 std::cout。
这会导致编码变得繁琐,所以 C++提供了 using namespace 的功能,即告诉编译器当前使用的命名空间名称,这样我们在调用该命名空间的内容时,可以省略前缀。
除了 using namespace 之外我们也可以单独使用 using 命令,例如:
using std::cout;
using std::cin;
cout
标准输出工具,可以将字符串输出在终端中。
cout 本身是一个预定义的对象,它知道如何显示字符串、数字和单个字符。<<符号表示将字符串发送给 cout,由 cout 输出在屏幕当中。<<符号表示了信息流动的路径,<<符号可以多个叠加连接,比如:
cout << "hello" << "world";
endl 表示当前输出行的结束,cout 遇到 endl 时会重启一行,否则则会接在同一行后面继续输出。
除了使用 endl 之外,我们也可以使用换行符来达到同样的效果,如:
cout << "hello" << "world\n";
C++ Primer 当中建议在输出由内容的字符串时使用换行符,而非 endl,其他情况下使用 endl,而非换行符。这两者绝大多数情况下是等价的,在一些特殊情况下可能会构成差异。
如 endl 确保程序继续运行前刷新输出,而使用"\n"则意味着有时候需要在输入信息之后才会出现提示。当然这不是重点,我们遇到的概率也非常小,如果实在搞不清楚也不用纠结,统一使用 endl 也行。
猜你喜欢
- 2024-10-11 c++ 编译阶段(c++编译原理)
- 2024-10-11 C++代码解析3(c++代码大全及其含义)
- 2024-10-11 C++ 将容器元素连接成字符串(c++中的容器)
- 2024-10-11 Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符
- 2024-10-11 深入解析C++字符串处理:高效去除头尾空格的多种方法与实践
- 2024-10-11 C到C++转换学习笔记(c和c++转换)
- 2024-10-11 初识C++输入输出(c++基本的输入输出)
- 2024-10-11 如何从C语言快速过渡到C++?大神回答道:只需要一个下午就可以
- 2024-10-11 C++系列2-1:C++快速入门之命名空间和输入输出
- 2024-10-11 C++第2课:输出与换行#少儿编程#盐城少儿编程#编程机器人
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)