Main():
  1. C++程序必须包含main()函数,操作系统通过调用main来运行C++程序。
  2. main()的形参可以为空。
  3. main函数的返回类型必须为int,返回给操作系统。int类型是一种内置函数(指由语言定义的类型)。
  4. main函数的返回值被用来指示状态。返回值0表明成功,非0的含义由系统定义,通常用来指出错误类型。

编译运行:

  1. IDE(集成开发环境)集成的是编译器、程序创建和分析工具包。

  2. Windows下编译运行.cpp文件:

  2.1 编译器:GNU

    2.2 步骤:首先安装MinGW并配置环境变量(具体过程参考其他博文)。然后gcc -o program1 program1.cpp 即可生成 可执行文件program1.exe。如果不写progam1,写的是gcc  program1.cpp,则会生成一个a.exe的可执行文件

    2.3 在Windows中运行可执行文件时,可直接输入program1,可以忽略其扩展名.exe。

输入输出:

  1. C++并未定义任何输入输出语句,而是通过一个全面的标准库来提高IO机制。iostream库就是其中一个。

  2. iostream库包含两个基础类型istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备独处或写入IO设备的。

  3. 标准库定义了4个IO对象:

  cin:标准输入

  cout:标准输出

  cerr:标准错误

  clog:输出程序运行时的一般性信息

  4. 当没有在头文件申明using namespace std时,在使用时需要加上std::,例如

std::cout<<"Hello world!"<<std::endl;

  前缀std::指出名字cout和endl是定义在名为std的命名空间(namespace)中的,::是作用域运算符,标准库定义的所有名字都在命名空间std中。

  命名空间可以帮助避免名字定义冲突,以及使用库中相同名字导致的冲突。从而也就表示可以自己定义一个与库中相同名字的名字,二者可同时存在,但是还是尽量不要这么做。但是,如果加上一句“using namespace std”的说明,就不能这么做了,可能会产生始料未及的命名冲突,也就是说当你在程序中自己又写了一个同名的名字,那么在使用时会覆盖原来库里的,只使用你定义的这个。但是这样在一定程度上可以方便些程序,可以不用加前缀也能使用所需的名字了。

  输出运算符<<用以接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的是要打印的值。此运算符将右侧的值写入左侧的运算对象,整个式子的运算结果就是其左侧运算对象。输出运算符本身也就是一个运算符,所以也有运算及运算结果。上述的输出语句中有两个输出运算符,可以理解经历了两次运算,运算顺序是:

(std::cout<<"Hello world!")<<std::endl;

  先计算第一个输出,把"Hello world!"的值写入了std::cout,再计算第二个输出,把std::endl的值写入了第一个运算符的结果,也就是(std::cout<<"Hello world!")。

其中"Hello world!"这类消息称为字符串字面值常量,是用一对双引号包围的字符序列。

endl称为操纵符,跟C语言中的\n不同,它在换行的同时会清空输出流的缓冲区。可以这么理解:当要写输出时,数据先到达缓冲区,等待写入,再到达输出设备,endl则可以将数据真正写入输出流并自动清空缓冲区。!程序员应在调试时常常添加打印语句,保证一直刷新流,否则,程序如果出错,输出可能还留在缓冲区,从而导致关于程序崩溃位置的错误。

输入运算符>>大致与输出运算符一致,只是它是从左侧运算对象的istream读入数据并存入右侧的运算对象中,方向不一样。但是也是返回其左侧运算对象作为其计算结果,所以std::cin>>v1>>v2的实质也是(std::cin>>v1)>>v2

  5. ++i 与i++

可以这么认为:

①++i是

i=i+;
return i;

②i++是

int t=i;
i=i+;
return t;

从而可以发现++i更高效,推荐使用++i。

  6. for循环和while循环的优劣。

如果实现1-5的累加,

while循环需要这么做:

int i=,sum=;
while(i<=)
sum+=i;
return sum;

for循环需要这么做:

int sum=;
for(int i=;i<=;i++)
sum+=i;
return sum;

对比可以发现,

  • for循环可以让变量i只生存在循环内部,当循环结束时,i被回收,从而可以节省空间,而且代码行数也较少。
  •   while适用于在执行循环体内部语句前就需要对i做处理的情况,for只能是在执行完i++后,再做sum+=i。
  •   对于有些人认为while适合循环次数不易预知的情况、for语句适合循环次数易预知的情况这一观点,我不太认同,因为for循环头中的循环条件语句其实也可以写成跟while语句一样的、甚至“i++”这个表达式可以也成跟while语句内部的相关语句一样

  所以我认为本质上只是第一点和第二点的区别。此外do while语句适合循环至少执行一次的情况这一点没错。

  7. 读取数量不定的输入数据

在输入数据未知的情况下,可以用while语句来接收,比如

int sum=,value=;
while(std::cin>>value)
sum+=value;
return value

这里数据读取操作是在while的循环条件中完成的,while循环条件的求值就是执行

std::cin>>value

  而输入操作符>>是从istream中读取一个数,保存在value中,其运算符结果返回给左侧运算对象std::cin,因此,此循环条件实质上是检测输入流std::cin是否为真。如果流的状态是有效的,即流未遇到错误,那么检测成功;如果遇到文件结束符(可以输入Ctrl+z 回车),或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态会变为无效,从而使条件变为假。

本人学习过一定的C++,但是只关注了编程内容即算法,没有关注过以上的绝大部分内容,所以本篇用以记录我以前没有注意过的点。

【C++ Primer】读书笔记_第一章的更多相关文章

  1. 【vue.js权威指南】读书笔记(第一章)

    最近在读新书<vue.js权威指南>,一边读,一边把笔记整理下来,方便自己以后温故知新,也希望能把自己的读书心得分享给大家. [第1章:遇见vue.js] vue.js是什么? vue.j ...

  2. C#本质论读书笔记:第一章 C#概述|第二章 数据类型

    第一章 1.字符串是不可变的:所有string类型的数据,都不可变,也可以说是不可修改的,不能修改变量最初引用的数据,只能对其重新赋值,让其指向内存中的一个新位置. 第二章 2.1 预定义类型或基本类 ...

  3. 《深入理解bootstrap》读书笔记:第一章 入门准备

    一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 ...

  4. 《LINUX内核设计与实现》读书笔记之第一章和第二章

    一.第一章 1. Unix内核的特点简洁:仅提供系统调用并有一个非常明确的设计目的抽象:几乎所有东西都被当做文件可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力进程:创建 ...

  5. Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触

    第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...

  6. Linux内核分析 读书笔记 (第一章、第二章)

    第一章 Linux内核简介 1.1 Unix的历史 Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的. 在Unix中,所有东西都被当做文件,这种抽象使对数据和对设备的操作是通过一套相 ...

  7. JavaScript权威指南读书笔记【第一章】

    第一章 JavaScript概述 前端三大技能: HTML: 描述网页内容 CSS: 描述网页样式 JavaScript: 描述网页行为 特点:动态.弱类型.适合面向对象和函数式编程的风格 语法源自J ...

  8. C++ Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

  9. HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识

    一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...

随机推荐

  1. Flink Flow

    1. Create environment for stream computing StreamExecutionEnvironment env = StreamExecutionEnvironme ...

  2. 08_Spring自定义标签

    [ 项目工程 ] [ Person.java 模型类 ] package com.spring.selfxml.model; /** * Created by HigginCui on 2018/9/ ...

  3. SpringBoot如何添加拦截器

    在web开发的过程中,为了实现登录权限验证,我们往往需要添加一个拦截器在用户的的请求到达controller层的时候实现登录验证,那么SpringBoot如何添加拦截器呢? 步骤如下: 1.继承Web ...

  4. linux父子进程问题

    今天遇到一个linux进程启动时指定Max open files不对的问题,导致程序建立socket异常,进而导致fullgc问题,影响正常服务.所以顺带又温习了下linux下的父子进程的特性. 孤儿 ...

  5. 第四次作业-第一次scrum冲刺

    团队成员 周斌 舒 溢 许嘉荣 唐 浩 黄欣欣 1.第一次冲刺任务安排 对Github上的HUSTOJ开源项目进行Fork,搭建基本环境 2.用户需求 ①基本功能显示在首页 ②能够提交题目并判题,并对 ...

  6. leveldb分析——Arena内存管理

    leveldb中实现了一个简单的内存管理工具Arena,其基本思想为:先预先向系统申请一块内存,此后需要申请内存时,直接到预先分配的内存中申请. 那么这样做的目的是什么呢? (1)避免了频率地进行ma ...

  7. 沉淀,再出发:Maven的使用和规范

    沉淀,再出发:Maven的使用和规范 一.前言 Maven作为项目管理工具,在一个大型项目开发的每个阶段都有着很大的用处,为什么需要这个东西呢,还是为了消除不确定性,统一化管理,正如我们做的每一件事其 ...

  8. 如何在 MSBuild Target(Exec)中报告编译错误和编译警告

    编译错误和编译警告 MSBuild 的 Exec 自带有错误和警告的标准格式,按照此格式输出,将被识别为编译错误和编译警告. 而格式只是简简单单的 error: 开头或者 warning: 开头.冒号 ...

  9. Ettercap结合sslstrip对ssl/https进行攻击

    Ettercap是一个非常强大的嗅探欺骗工具:在以往的ettercap的使用过程中,我们大多用来嗅探http,ftp,和一些加密比较简单的邮箱等的密码,对于新型的ssl/https等的加密协议就显得不 ...

  10. kali配置ip,更新源,更新签名

    以下是我在简单玩kali时候碰到的一些问题,然后找到的解决办法,能成功解决我当时碰到的问题,如果你有疑问或者碰到不能解决的问题可以在下面评论 ############################# ...