C++学习笔记:预处理、进制转换与函数默认参数

需积分: 27 10 下载量 67 浏览量 更新于2024-09-08 2 收藏 30KB MD 举报
"C++基础知识的学习笔记,包含了C++的文件转换过程、进制输出、bool类型显示、数组长度计算、防止头文件重复包含、函数参数默认值以及内联函数等核心概念。" C++作为一门强大的面向对象编程语言,其基础知识涵盖了多个方面。下面将深入解析这些知识点: 1. **文件转换顺序**: C++程序的编译过程分为多个阶段,首先是预处理器阶段,它处理`#include`指令,展开宏定义,如`#define`,并处理条件编译指令,例如`#ifdef`,生成中间文件hello.i。接着是编译阶段,编译器将预处理后的文本转换为汇编代码,生成hello.s。然后汇编器将汇编代码转化为机器可理解的目标文件hello.o(在Windows系统中可能是hello.obj)。最后,链接器将所有必要的目标文件和库文件合并,生成可执行文件。 2. **进制输出**: C++提供了多种输出进制的方式,可以使用`std::oct`设置输出为八进制,`std::dec`为十进制,`std::hex`为十六进制。例如,通过`std::cout << std::oct << 数值`可以将数值以八进制形式输出。 3. **boolalpha函数**: `std::boolalpha`是一个操纵符,用于控制流的布尔输出格式。当它被激活后,`true`和`false`将被打印出来,而不是1和0。 4. **计算数组长度**: 要获取数组的长度,可以使用`sizeof`运算符除以元素的大小。如示例所示,`sizeof(arr)/sizeof(int)`得到的是数组`arr`中元素的个数,即数组的长度。 5. **防止头文件重复包含**: 为了避免头文件在同一编译单元中被多次包含导致的问题,可以使用条件编译指令`#ifndef`,`#define`,`#endif`或者C++特有的`#pragma once`来确保头文件只被包含一次。 6. **函数参数默认值**: 函数参数可以设置默认值,但有默认值的参数必须位于参数列表的末尾。这样,如果调用函数时省略了后面的参数,编译器会使用默认值。例如,`void fun(int i, int j=3, int k=5)`,在不同的调用中,可以根据传入的参数数量和顺序自动填充默认值。 7. **内联函数**: 内联函数是一种优化技术,用于提高程序执行效率。它们在编译时被展开,而不是在运行时进行函数调用。内联函数通常用于小型且频繁调用的函数,以减少函数调用带来的开销。声明内联函数时,前面加上`inline`关键字,例如`inline int max(int a, int b, int c)`。 以上是C++基础知识的部分要点,掌握这些对于理解和编写C++程序至关重要。在实际编程中,还需要理解指针、类与对象、继承、多态、模板等更深入的概念,才能更好地利用C++进行复杂系统的设计和开发。