01 C++ 基础⚓︎
约 595 个字 45 行代码 预计阅读时间 4 分钟
历史⚓︎
下面用一张图简单介绍一下:
C++ 设计哲学⚓︎
- 只增加用于解决实际问题的特性
- 程序员可根据需求选择他们自己的方式
- 关键:分划(Compartmentalization)
- 允许程序员完全控制(当他们想要时)——程序员最清楚该怎么做
- 万不得已不牺牲性能
- 在编译期间尽可能地确保安全——但仅提供必要的检查
因此 C++ 具有较高的运行效率,但是 C++ 强大的能力意味着我们程序员需要担起更大的责任,需要对写的每一行代码负责,比如 C++ 不会检查索引越界的情况,由此引发的错误需要自行承担。
C++ 基础⚓︎
C++ = 基本语法 + STL(Standard Template Library,标准模板库)
- 基本语法
- 语句以分号
;
结尾 - 基本类型:
int
、double
... - 基本语法规则
- 语句以分号
这是一个最基本的 C++ 程序:
- STL
- 许多的通用函数,以及一些算法、容器、迭代器等(有些被称为“类(class)”)
- 内部类,比如
map
(映射) 、 set
(集合) 、 vector
(向量) - 通过名称空间(namespace)
std::
访问 - 功能强大、维护完善
名称空间
- 很多东西都在名称空间
std::
内,比如std::out
、std::cin
、std::lower_bound
等等。 - 虽然可以用
using namespace std;
一句话省去后面再打std::
的功夫,提高敲代码的效率,但这并不是一个好习惯(具体原因可以看这个博客) 。
编译⚓︎
常用编译器:g++、clang
编译的过程:
- 预处理
- 处理
#
开头的语句(文件包含、宏展开、条件编译等) - 去掉注释和空白字符
- 处理
- 编译:真正翻译的开始,将源代码文件转为汇编文件,为机器指明了需要执行的命令
- 汇编:汇编程序将汇编代码转为目标代码(处理器可运行的机器代码)
- 链接:将所有的目标代码片段组装起来,形成一个完整的可执行程序
除了手动执行命令进行编译操作外,我们还可以用 make
构建系统来运行 Makefile 文件来编译,下面是一个典型的 Makefile 文件:
TARGET = sh111
# Flags --begin
CXXBASE = g++
CXX = $(CXXBASE) -std=c++17
CXXFLAGS = -ggdb -O -Wall -Werror
CPPFLAGS =
LIBS =
# Flags --end
OBJS = sh111.o
HEADERS =
all: $(TARGET)
$(OBJS): $(HEADERS)
# Targets: $(TARGET), Rules: $(OBJS)
$(TARGET): $(OBJS)
$(CXX) -o $@ $(OBJS) $(LIBS)
clean:
rm -f $(TARGET) $(LIB) $(OBJS) $(LIBOBJS) *~ .*~ _test_data*
.PHONY: all clean starter
还有一种常用的构建系统生成器名为 CMake
,我们可以用它来生成 Makefile,可以看作 Makefile 的高度抽象:
cmake_minimum_required(VERSION 3.0)
project(wikiracer)
set(CNAME_CXX_STANDARD 17)
set(CNAME_CXX_STANDARD_REQUIRED True)
find_package(cpr CONFIG REQUIRED)
# adding all files
add_executable(main main.cpp wikiscrapper.cpp.o error.cpp)
target_link_libraries(main PRIVATE cpr)
评论区
如果大家有什么问题或想法,欢迎在下方留言~