文章目录

  • 第1章
    • 第2节 C++开发环境与相关工具
    • 第3节 C++的编译/链接模型
      • 预处理
      • 编译
      • 链接
  • 第2章
    • 第1节 HelloWorld
    • 第2节 系统IO
      • 输入输出流 iostream
      • 命名空间 namespace
    • 第3节 猜数字与控制流
    • 第4节 结构体与自定义数据类型

第1章

第2节 C++开发环境与相关工具

C++开发工具:

  • /usr/bin/time +运行程序 打印花费的时间和CPU占用率等(Linux)
  • valgrind
  • cppreference.com 网站(C++百科全书)
  • Complier Explorer 网站(选择编译器、查看程序对应的汇编)
  • C++ insights 网站 代码等价变换 便于程序理解
  • Youtube cppcon会议

第3节 C++的编译/链接模型

分块处理:

衍生出的概念:

  • 定义/声明: 多个文件使用同一变量,在一处定义,其他文件声明,声明处编译时不查找变量,链接时去查找变量建立链接

  • 头文件/源文件:多个文件需要使用同一个变量时,将声明放在一个头文件中,其他源文件引用头文件,编译时会展开头文件,提升写代码的效率

  • 翻译单元

    • 源文件 + 相关头文件 (直接/间接)- 应忽略的预处理语句 (每个编译器处理的就为一个翻译单元)
  • 一处定义原则:同一变量、对象、函数等只有一处定义

    • 程序级:一般函数
    • 翻译单元级:内连函数、类、模板

预处理
  • 将源文件转换为翻译单元
  • 防止头文件被***循环展开***(多个头文件互相嵌套,导致头文件一直循环展开)
    • #ifdef 解决 (可能有名字冲突)
    • #pragma once 解决 (只处理一次)
编译
  • 将翻译的那远转换为相应的汇编语言表示

  • 编译***优化***

    • https://godbolt.org/z/zh9aqx (优化后不能打断点分步调试,但是能提升程序的性能,通常编译分为Debug版本和Release版本,调试结束后使用Release版本重新编译以提升程序性能)
  • 增量编译 V.S. 全部编译

链接
  • 合并多个目标文件,关联声明和定义
  • 连接(Linkage)种类:内部链接、外部链接
  • 链接常见错误:找不到定义

第2章

第1节 HelloWorld

获取main函数的返回值语句:echo $?

C++如果没有return值,规定默认返回0。

main只有两种形式:

int main()
int main(int argc,char* argv[])

第2节 系统IO

#include "文件名"从***当前文件目录***开始寻找,若找不到再从系统目录开始寻找

#include <文件名>从系统目录开始寻找

(若不确定则使用双引号)

若自己编写头文件加.h后缀,C++标准库没有后缀

输入输出流 iostream

输出流: cout cerr clog

coutcerr 在终端打印出显示相同,可以输出定向到不同的文件当中

例如:

./HelloWorld >txt1 2>txt2         //输出到不同的文件
cat ./txt1                        //查看不同的文件
cat ./txt2

输出流区别:1.输出目标;2是否立即刷新缓冲区

cerr 错误信息,立即刷新缓冲区

clog日志信息,不立即刷新缓冲区

刷新缓冲区:std::flush std::endl (刷新缓冲区并且换行)

命名空间 namespace

目的:防止不同人写的多段代码有命名冲突

//定义:
namespace NameSpace1{void fun(){}
}
//调用1:
NameSpace1::fun();
//调用2:
using namespace NameSpace1;
//调用3:
namespace ns1 = NameSpace1;
ns1::fun();

不推荐在函数外部使用using namespace ,不应在头文件中使用using namespace,因为所有引用头文件的源文件都有命名冲突的风险

std 标准名字空间

编译得到的.o文件,通过nm + 文件名命令查看所有外部链接

nm ./main.o

命名空间和名称改编:name mangling

nm ./main.o | c++filt -t

程序中只有一个main函数,所以只有main函数命名改编

使用printf等C语言输入输出函数时要#include <cstdio>

printf 使用比较直观,但是需要对应不同数据类型要对应不同的占位符。

cout 使用简单不需要占位符,能够自动匹配输出类型。

第3节 猜数字与控制流

const int x = 42;

定义x为常量,不能被改变值

第4节 结构体与自定义数据类型

将相关数据放在一起,通过.来访问元素

定义结构体 struct + 名字

通过.操作符访问结构体内部元素

引入成员函数,更好表示函数与数据的相关性

C++基础学习笔记:第一章、第二章相关推荐

  1. 日语课程0基础学习笔记——第一课

    学习目标: 编程0基础学习笔记--前言 这是一个个人使用的日语学习记录博客!根据B站的up日语教程一直跟下来,从第一天开始记录.后续会把我学习的内容和知识点尽量多的记录在这个博客中,不仅是方便自己复习 ...

  2. 《信息安全工程师教程》学习笔记02(第二章 密码学基础与应用—DES算法)

    第二章 密码学基础与应用 2.1 密码学的基本概念 1949年香农发表了<保密系统的通信理论> 1976年W.Diffie和M.Hellman提出公开密钥密码 1977年美国联邦政府颁布数 ...

  3. python从入门到实践学习笔记_Python编程从入门到实践:学习笔记1(第二章)

    开通博客我用的理由是:读书学习时记笔记,一方面为了回顾,一方面为了督促自己.fighting! 学习Python,我买了Python编程从入门到实践. 我将从第二章开始记录我认为我以后会忘记以及重要的 ...

  4. 西瓜书学习笔记——第一、二章

    目录 一.第一章 绪论 1.重要基本术语 1.1 分类与回归 1.2 聚类 1.3 监督学习和无监督学习 1.4 泛化 1.5 归纳偏好 二.第二章 模型评估与选择 1.评估方法 1.1 留出法 2. ...

  5. 【学习笔记】计算机网络 第二章 物理层

    以下内容为参考课件和<计算机网络>(第7版,谢希仁编著)的个人整理,若有错误欢迎指出 第二章 物理层 文章目录 第二章 物理层 一.物理层的基本概念 1.主要任务 2.四个特性 二.数据通 ...

  6. 软考网络管理员学习笔记2之第二章数据通信基础

    第二章.数据通信基础 1.奈奎斯特定理与香农理论 [考法分析] 奈奎斯特定理是理想情况下,求数据速率 香农理论是在受到噪声干扰后,求数据速率 [要点分析] 看题目中是否提及到噪声或信噪比等关键词 如果 ...

  7. SpringBoot学习笔记-2:第二章 Spring Boot 配置

    第二章 Spring Boot 配置 1.YAML 配置 SpringBoot 全局配置文件 application.properties application.yml YAML 以数据为中心,比 ...

  8. css层叠样式表基础学习笔记--第一章 css简介及引入

    第一章 css简介及引入 1-01 css简介 1-02 css优缺点 1-03 css书写格式 1-04 css引入格式 行内样式 内部样式 外部样式 导入样式 1-05 css注释 1-01 cs ...

  9. css层叠样式表基础学习笔记--第十二章 我要自学网首页实战

    第十二章 我要自学网首页实战 12-01 页面分析 12-02 工作准备 12-03 搜索区块页面结构 12-04 导航条布局 12-05 幻灯片布局 12-06 公告栏布局 12-07 远程培训班布 ...

  10. 《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 三.文法和语言的分类 1.Chomsky语言分类法 ...

最新文章

  1. java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值
  2. 查看linux上redis的运行状态,Redis教程(七)使用info查看服务状态
  3. 杭电1728bfs逃离迷宫java实现
  4. java8升级java11到底敢不敢?
  5. 牛客多校3 - Operating on a Graph(并查集+链表合并)
  6. c#日期转换周几_RPA经验:使用 selector 选择日期
  7. 回归即登顶社交应用排行榜,多牛传媒开启人人“第二春”
  8. 如何估算网站日承受最大访问PV
  9. [转]C++日志系统log4cxx使用总结
  10. 【知识图谱系列】自适应深度和广度图神经网络模型
  11. 《神经网络与深度学习》邱锡鹏编程练习_第一章numpy_tutorial答案分享
  12. 计算机网络试卷北理珠,北理工97级计算机网络终考试卷
  13. ibatis iterator list 参数 查询
  14. 计算机型号win7,win7cpu型号怎么看
  15. 钉钉安装需要管理员权限报错解决办法
  16. php radio是什么意思,radio是什么意思_radio在线翻译_英语_读音_用法_例句_海词词典...
  17. 神经网络的权重初始化,神经网络的权值和阈值
  18. 代码传奇 | 搞罢餐的热血青年到 PHP大神的蜕变——“鸟哥”惠新宸
  19. Java随笔记 - Java BIO,Socket通信
  20. Excel高级功能 数据工具

热门文章

  1. 剑指offer-二叉树
  2. CheckedListBoxControl 实现复选框的单选与多选功能
  3. 微价值:专訪个人开发人员800万用户之《系统清道夫》
  4. SQL查询-将列转换成字符串(for xml path)
  5. cello 有关状态
  6. 从零实现爬虫和情感分类模型(二)
  7. 【CIKM2020】如何更为合适地评测推荐算法? Top-N物品推荐算法评测设置回顾
  8. 【实践】BiLSTM上的CRF,用命名实体识别任务来解释CRF(2)损失函数
  9. 说来你可能不信,穿越后男狐狸逼我好好学习…
  10. 深度学习2.0-19.随机梯度下降之可视化与实战