0%

C++

C++ 为什么要先声明头文件

  • 声明而非定义:头文件通常包含的是声明(declarations),而不是定义(definitions)。这意味着它们告诉编译器某个变量、函数或类的存在及其类型(即静态类型),但不包括具体的实现细节。例如,函数的原型会告诉你函数的名字、返回类型和参数列表,但不会包含函数体。
  • 避免类型错误和未识别接口:通过在头文件中声明变量、函数和类的结构,编译器可以在编译阶段进行类型检查,确保代码中使用的变量和函数调用与它们的声明相匹配。这有助于提前发现类型错误,并确保所有接口都被正确识别。如果尝试使用一个没有在任何地方声明过的函数或变量,编译器将无法识别并报错。
  • 模块化设计和代码复用:头文件支持模块化设计,允许开发者将程序分割成多个逻辑部分。每个部分可以通过包含相应的头文件来访问其他部分的接口,而不需要了解其内部实现细节。这种方式不仅提高了代码的可读性和维护性,还促进了代码复用。
  • c解决依赖关系:在大型项目中,不同源文件之间可能存在复杂的依赖关系。通过头文件,可以清晰地指定这些依赖关系,使得编译器能够正确解析跨文件的引用。
  • 提高编译效率:合理组织头文件可以帮助减少不必要的重新编译工作。比如,当修改了一个源文件时,只有直接或间接依赖于该源文件的其他文件需要重新编译,从而节省时间。
    成员函数的调用
    1
    2
    3
    void res = ClassA::functionX()
    ClassA a;
    void res = a.functionX()

vcpkg install libjpeg-turbo:x64-windows

内联函数inline function

编译时函数体会直接复制到 调用处(类似宏定义)是一种空间换时间的效率提升

指针

1
2
3
4
5
int a; 
int* p;

p = &a;
// *p 相当于a的值

禁写间接引用

1
2
3
4
5
6
7
8
9
const int *p = &a;
p=&b; // 指针p指向可以修改
// *p=1 非法 禁止操作*p

// 扩展 如果禁止修改指向 应声明为
// const int const* p = &a 声明时必须初始化

// 扩展 禁写指针即禁止修改指向 常指针
// int* const p = &a 可以操作*p修改a的值

debug

在visual studio中open一个cpp文件,执行 Ctrl+F5 提示“Please Select a Valid Startup Item”
一般要下载一个c语言编译器,并配置到vscode
对于已经安装visual studio的环境,应能配置使用已有编译器

类型安全

类型安全指变量仅能访问权限匹配的内存区域。该概念区分编程语言和程序语境,C++是不具有类型安全的,因为在C++中,没有限制对于内存的解释方式,比如如int型的数据1,同时也可以解读为bool型的数据true,但是可以编程声明加以区分,使程序达成类型安全

协程(存目)

troubleshooting

或出现error LNK2019: unresolved external symbol _Thrd_sleep_for类似错误 与编译器版本有关 应升级visual studio