c++

本文详细介绍了C++编程语言的基础知识,包括C++的起源、编程范式、标准演进及与实现的差异。探讨了C++的编译/链接模型,强调了预处理、编译和链接的重要性。此外,还介绍了C++的开发环境、工具以及初学者常见的Hello World程序,讲解了基本类型、IO操作、控制流和自定义数据类型。通过对初始化、赋值、类型系统和复合类型的讨论,深入理解C++的强类型特性,特别是指针、引用和常量的使用。
摘要由CSDN通过智能技术生成

第1章:C++基础
第1节:什么是C++
*C语言的扩展
— 关注性能

  • 与底层硬件紧密结合
    在这里插入图片描述

  • 对象生命周期的精确控制
    在这里插入图片描述

  • Zero-overhead Abstraction
    在这里插入图片描述

— 引入大量特性,便于工程实践
*三种编程范式:面向过程、面向对象、泛型
*函数重载、异常处理、引用

*一系列不断衍进的标准集合
—C++98/03,C++11,C++14,C++17,C++20,C++23?

— 语言本身的改进
*Memory Model
*Lambda Expression

— 标准库的改进
*type_traits / ranges
*auto_ptr

*C++标准的工业界实现
— MSVC / GCC / Clang…
— 每个编译器可能并不完全遵照标准
*https://godbolt.org/z/cKMjK3
— 不同的实现存在差异
*https://godbolt.org/z/6hnPhY

*不能脱离具体的语境讨论C++
*编写程序时要注重
— 性能
— 标准

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

  • Visual C++ / GCC(G++)/ Clang(Clang++)…
  • 集成开发环境:Visual Studio / CodeLite / Code::blocks / Eclipse…
  • 工具
    — /usr/bin/time
    — valgrind
    — cpp reference
    — Compiler explorer
    — C++ insights

第3节:C++的编译/链接模型
*简单的加工模型
— 源程序 ——> 加工 —— 可执行文件 ——>
*问题:无法处理大型程序
— 加工耗时较长
— 即使少量修改,也需要全部重新加工

*解决方案:分块处理
— 源文件1 ——> 编译 —— 目标文件1 ——> 链接 —— 可执行程序 ——>
— 源文件N——> 编译 —— 目标文件N ——> 链接 —— 可执行程序 ——>

*好处
— 编译耗资源但一次处理输入较少
— 链接输入较多但处理速度快
— 便于程序修改升级

*由“分块处理”衍生出的概念
— 定义 / 声明
— 头文件 / 源文件
— 翻译单元
*源文件 + 相关头文件(直接 / 间接)- (减去)应忽略预处理的语句
— 一处定义原则:
*程序级:一般函数
*翻译单元级:内联函数、类、模板

*预处理
— 将源文件转换为翻译单元的过程
— 防止头文件被循环展开

  • #ifdef 解决方案
  • #pragma once 解决方案

*编译
— 将翻译单元转换为相应的汇编语言表示
— 编译优化

  • https://godbol.org/z/zh9aqx
    — 增量编译 V.S. 全部编译

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

*C++的编译/链接过程是复杂的,预处理、编译与链接都可能出错
*编译可能产生警告、错误,都要重视

*小结
*C++是一门注重性能的程序设计语言
*C++的标准经历类一系列的衍化,还在不断发展
*标准与具体实现之间存在差距
*C++源程序转换成可执行文件是相对复杂的过程,主要包含预处理、编译、链接等阶段,每一阶段都可能引入错误

第2章:C++初探
第1节:从Hello world谈起
*函数:一般能被反复调用的代码,可以接收输入,进行处理并(或)产生输出
— 返回类型:表示了函数返回结果的类型,可以为void
示例:

#include<iostream>

void fun(const char* pInfo)
{
   
	std::cout << pInfo << std::endl;
	
}

int main()
{
   
	fun("Hello World");
	fun("Hello China");
}

— 函数名:表示函数接收的参数类型,可以为空,可以为void,可以为无形参
— 函数体:具体的执行逻辑

*main 函数:特殊的函数,作为整个程序的入口
— 返回类型为int,表示程序的返回值,通常使用0来表示正常返回
— 形参列表可以为空

一个基本程序主要包含:返回类型“int”+函数名(main)+形参列表()+函数体{…}等构成。

*(内建)类型:为一段存储空间赋予实际的意义
int
——————————>
byte
———>
1000 1001 1002 1003 空 空 空 空
*语句:表明了需要执行的操作
— 表达式+分号的语句
— 语句块
— if / while等语句

*注释:会被编译器忽略的内容
— 用于编写说明或去除不使用的语句
— 两种注释形式: /**/ 与 //

第2节:系统I/O
*iostream:标准库所提供的IO接口,用于与用户交互
— 输入流:cin; 输出流:cout / cerr / clog
— 输出流的区别:1.输出目标; 2.是否立即刷新缓冲区
— 缓冲区与缓冲区刷新:std::flush;std::endl
示例:

#include<iostream>

int main()
{
   
	int x;
	std::cout << "How old are you :";
	std::cin >> x;
	std::cout << "You are" << x;

}

*名字空间:用于防止名字冲突
— std 名字空间
示例:

#include<iostream>
namespace NameSpace1
{
   
	void fun()
	{
   }
	int x;
}
namespace NameSpace2 {
   
	void fun()
	{
   }
}
int main()
{
   
	std::cout 
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值