跳转至

01 C++ 基础⚓︎

595 个字 45 行代码 预计阅读时间 4 分钟

历史⚓︎

下面用一张图简单介绍一下:

C++ 设计哲学⚓︎

  • 只增加用于解决实际问题的特性
  • 程序员可根据需求选择他们自己的方式
  • 关键:分划(Compartmentalization)
  • 允许程序员完全控制(当他们想要时)——程序员最清楚该怎么做
  • 万不得已不牺牲性能
  • 在编译期间尽可能地确保安全——但仅提供必要的检查

因此 C++ 具有较高的运行效率,但是 C++ 强大的能力意味着我们程序员需要担起更大的责任,需要对写的每一行代码负责,比如 C++ 不会检查索引越界的情况,由此引发的错误需要自行承担。

C++ 基础⚓︎

C++ = 基本语法 + STL(Standard Template Library,标准模板库)
  • 基本语法
    • 语句以分号;结尾
    • 基本类型:intdouble...
    • 基本语法规则

这是一个最基本的 C++ 程序:

#include <iostream>

int main()
{
    std:out << "Hello, world!" << std:endl;
    return 0;
}
  • STL
    • 许多的通用函数,以及一些算法、容器、迭代器等(有些被称为“类(class)”)
    • 内部类,比如map(映射set(集合vector(向量)
    • 通过名称空间(namespace)std:: 访问
    • 功能强大、维护完善
名称空间
  • 很多东西都在名称空间std::内,比如std::outstd::cinstd::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)

评论区

如果有什么问题或想法,欢迎大家在下方留言~