摘要: volatile 用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。 遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据, 阅读全文
posted @ 2023-02-20 16:03 小秦同学在上学 阅读(22) 评论(0) 推荐(0) 编辑
摘要: #include <iostream> using namespace std; int main() { int a = 0x1234; //由于int和char的长度不同,借助int型转换成char型,只会留下低地址的部分 char c = (char)(a); if (c == 0x12) c 阅读全文
posted @ 2023-02-20 15:57 小秦同学在上学 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 内联函数 如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。 一个函数定义为内联函数,则需要在函数名前面放置关键字 inline 在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符 内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行 阅读全文
posted @ 2023-02-20 15:34 小秦同学在上学 阅读(23) 评论(0) 推荐(0) 编辑
摘要: #include <iostream> using namespace std; class Student{ public: Student(){//默认构造函数,没有参数 this->age = 20; this->num = 1000; }; Student(int a, int n):age 阅读全文
posted @ 2023-02-20 15:30 小秦同学在上学 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 重载 是指在同一范围定义中的同名成员函数才存在重载关系。主要特点是函数名相同,参数类型和数目有所不同 不能出现参数个数和类型均相同,仅仅依靠返回值不同来区分的函数 //父类 class A{ public: virtual int fun(int a){} } //子类 class B : publ 阅读全文
posted @ 2023-02-20 15:28 小秦同学在上学 阅读(29) 评论(0) 推荐(0) 编辑
摘要: C的类型安全 C只在局部上下文中表现出类型安全,比如试图从一种结构体的指针转换成另一种结构体的指针时,编译器将会报告错误,除非使用显式类型转换。 printf格式输出 上述代码中,使用%d控制整型数字的输出,没有问题,但是改成%f时,明显输出错误,再改成%s时,运行直接报segmentation f 阅读全文
posted @ 2023-02-20 15:23 小秦同学在上学 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 都是是指向无效内存区域(这里的无效指的是"不安全不可控")的指针 int main(void) { int* p; // 未初始化 std::cout<< *p << std::endl; // 未初始化就被使用 return 0; } 野指针: 指的是没有被初始化过的指针 为了防止出错,对于指针初 阅读全文
posted @ 2023-02-20 15:06 小秦同学在上学 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 为了能够正确的在C++代码中调用C语言的代码:在程序中加上extern "C"后,相当于告诉编译器这部分代码是C语言写的,因此要按照C语言进行编译,而不是C++; 哪些情况下使用extern "C": C++代码中调用C语言代码; 在C++中的头文件中使用; 在多个人协同开发时,可能有人擅长C语言, 阅读全文
posted @ 2023-02-20 15:03 小秦同学在上学 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 拷贝初始化和直接初始化 直接初始化直接调用与实参匹配的构造函数,拷贝初始化总是调用拷贝构造函数。 拷贝初始化首先使用指定构造函数创建一个临时对象,然后用拷贝构造函数将那个临时对象拷贝到正在创建的对象。 可以发现用=就是拷贝构造函数 string str1("I am a string");//语句1 阅读全文
posted @ 2023-02-20 14:59 小秦同学在上学 阅读(70) 评论(0) 推荐(0) 编辑
摘要: override: 当在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以: class A { virtual void foo(); } class B : public A { void foo(); //OK virtual void foo(); // OK 阅读全文
posted @ 2023-02-20 14:51 小秦同学在上学 阅读(18) 评论(0) 推荐(0) 编辑
摘要: C++中const和static的作用 static: 不考虑类的情况 隐藏。不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用 默认初始化为0,包括未初始化的全局静态变量与局部静态变量,都存在全局未初始化区 静态变量在函数内定义,始终存在 阅读全文
posted @ 2023-02-20 14:45 小秦同学在上学 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 编译阶段 define是在编译的预处理阶段起作用,类似于代码插入 const是在编译、运行的时候起作用 安全性: define只做替换,不做类型检查和计算,也不求解,容易产生错误 const常量有数据类型,编译器可以对其进行类型安全检查 内存占用 define只是将宏名称进行替换,在内存中会产生多分 阅读全文
posted @ 2023-02-20 14:25 小秦同学在上学 阅读(15) 评论(0) 推荐(0) 编辑
摘要: C++中struct和class的区别 相同点: 两者都拥有成员函数、公有和私有部分 任何可以使用class完成的工作,同样可以使用struct完成 不同点: struct默认是公有的,class则默认是私有的 class默认是private继承, 而struct默认是public继承 C++和C的 阅读全文
posted @ 2023-02-20 14:22 小秦同学在上学 阅读(17) 评论(0) 推荐(0) 编辑
摘要: C++和Python的区别 python是一种脚本语言,是解释执行的,而C++是编译语言,是需要编译后在特定平台运行的。 python可以很方便的跨平台,但是效率没有C++高。 Python使用缩进来区分不同的代码块,C++使用花括号来区分 C++中需要事先定义变量的类型,而Python不需要 Py 阅读全文
posted @ 2023-02-20 14:13 小秦同学在上学 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 指针常量:本质是指针,但是指向常量,也就是可以改变指向,但是不可以改变指向的值 -常量指针:本质是指针,但是是常量的指针,不可以改变指向,但是可以改变指向的值 a和&a有什么区别? int a[10]; int (*p)[10] = &a a是数组名,是数组首元素地址,+1表示地址值加上一个int类 阅读全文
posted @ 2023-02-20 14:09 小秦同学在上学 阅读(14) 评论(0) 推荐(0) 编辑
摘要: ''' int main(int argc, char const *argv[]){ const char* str = "name"; sizeof(str); // 取的是指针str的长度,是8 strlen(str); // 取的是这个字符串的长度,不包含结尾的 \0。大小是4 return 阅读全文
posted @ 2023-02-20 13:59 小秦同学在上学 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 变量声明和定义区别? 声明仅仅是把变量的声明的位置及类型提供给编译器,并不分配内存空间;定义要在定义的地方为其分配存储空间。 相同变量可以在多处声明(外部变量extern),但只能在一处定义 搞懂全局变量、外部变量、静态全局变量的区别 全局变量 是在函数的外部定义的,它的作用域为从变量定义处开始,到 阅读全文
posted @ 2023-02-20 11:58 小秦同学在上学 阅读(51) 评论(0) 推荐(0) 编辑
摘要: #define 标识符 替换列表 宏定义和函数有何区别? 宏在预处理阶段完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快; 宏定义属于在结构中插入代码,没有返回值;函数调用具有返回值。 宏定义参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。 阅读全文
posted @ 2023-02-20 11:51 小秦同学在上学 阅读(49) 评论(0) 推荐(0) 编辑
摘要: int *p = new float[2]; //编译错误(类型安全) int p = (int)malloc(2 * sizeof(double));//编译无错误 相同点: 都可用于内存的动态申请和释放 不同点: 前者是C++运算符(一般用于生成对象),后者是C/C++语言标准库函数 new自动 阅读全文
posted @ 2023-02-20 11:40 小秦同学在上学 阅读(109) 评论(0) 推荐(0) 编辑
摘要: int *p[10] int (*p)[10] int *p(int) int (*p)(int) int *p[10]表示指针数组,强调数组概念,是一个数组变量,数组大小为10,数组内每个元素都是指向int类型的指针变量。 int (*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型 阅读全文
posted @ 2023-02-20 11:37 小秦同学在上学 阅读(35) 评论(0) 推荐(0) 编辑