摘要: 何时使用static修饰的局部变量? 当要求变量受到上一次运算后的影响时,使用static修饰局部变量即可。 举个栗子: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return 阅读全文
posted @ 2022-01-11 22:08 Kisen 阅读(37) 评论(0) 推荐(0)
摘要: 当类A中无任何成员变量或成员函数时,sizeof(A)=1。 为啥? 因为若为零,则声明一个class A[10]对象数组,但是每一个对象占用空间为0,则无法进行区分。 阅读全文
posted @ 2022-01-11 21:58 Kisen 阅读(60) 评论(0) 推荐(0)
摘要: 目前只遇到过三个: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return i; } int main(void) { if(__cplusplus){ cout << "c+ 阅读全文
posted @ 2022-01-11 21:55 Kisen 阅读(72) 评论(0) 推荐(0)
摘要: virtual是隐性继承的,因此当父类写了virtual函数,子类进行重写时virtual可写可不写推荐写全。 其他类似virtual的具有隐性继承能力的还有: 阅读全文
posted @ 2022-01-11 21:32 Kisen 阅读(50) 评论(0) 推荐(0)
摘要: debug:调试 release:发布 这是谷歌翻译,但在build阶段这两者具体区别是什么捏? debug,会附加很多程序不相关或相关度不高的信息,编译产生的可执行文件大小也偏大一些; release是debug的“瘦身版”,简化了附加信息,大大减少了编译时间,同时产生的可执行文件也相对小一些。 阅读全文
posted @ 2022-01-11 21:26 Kisen 阅读(33) 评论(0) 推荐(0)
摘要: C++const修饰四大作用 阻止一个变量被改变,即”只读“; 函数声明中对形参添加const修饰,表明作为外部输入量无法被函数内部改变; 类的成员函数若被指定为const,则表明它是一个常函数,此成员函数自身无法修改对象类中的成员数据; 类的成员函数的返回值若被指定为const,则可以使得这个返回 阅读全文
posted @ 2022-01-11 21:19 Kisen 阅读(49) 评论(0) 推荐(0)
摘要: 标答:全局对象的构造函数。 阅读全文
posted @ 2022-01-11 20:59 Kisen 阅读(90) 评论(0) 推荐(0)
摘要: 简单情况下,打开会失败 复杂情况下,由于文件描述符结构中指针指向的内存被重复释放,而文件指针自身不会改变,因此在释放的间隔过程中有可能会将后来进入这片空间的新数据也释放掉,造成未知错误。 阅读全文
posted @ 2022-01-11 19:37 Kisen 阅读(439) 评论(0) 推荐(0)
摘要: 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表 阅读全文
posted @ 2022-01-11 18:04 Kisen 阅读(136) 评论(0) 推荐(0)
摘要: 方法一: 1、定义一个指针p; 2、sizeof(p),若结果为4,则为32位系统;若为8,则为64位系统。 方法二(不使用sizeof()): unsigned int c = ~ 0 ; cout << c;//结果为65535就是16位;4294967295就是64位 return 0; 阅读全文
posted @ 2022-01-11 17:35 Kisen 阅读(269) 评论(0) 推荐(0)
摘要: 类型安全是指同一段内存在不同的地方,会被强制要求使用相同的类型来解释(内存中的数据是用类型来解释的)。 简单地说类型安全一定程度等价于内存安全。 Java语言是类型安全的,除非强制类型转换。 C语言不是类型安全的,因为同一段内存可以用不同的数据类型来解释,比如1用int来解释就是1,用boolean 阅读全文
posted @ 2022-01-11 17:32 Kisen 阅读(410) 评论(0) 推荐(0)
摘要: 内存耗尽的两种主流处理方式 一、直接return 适用于只有一处需要释放内存,即整个函数只有一处需要动态分配内存。 二、直接exit(1) 适用于函数多出可能发生内存溢出的情况。 注意设置异常错误处理 一般做法是为new/malloc编写自定义的异常处理函数。 阅读全文
posted @ 2022-01-11 17:22 Kisen 阅读(246) 评论(0) 推荐(0)
摘要: 为何有了malloc()和free()还要有new和delete? 区别其实在标题就已经十分明显了——malloc()和free()是C/C++的标准库中的库函数,用于手动开辟/销毁内存空间;new和delete是C++中新增的关键字,作用与malloc()和free()一致。 虽然作用一致,但是库 阅读全文
posted @ 2022-01-11 17:16 Kisen 阅读(70) 评论(0) 推荐(1)
摘要: 全局变量、局部变量之间的区别?四个维度回答 维度一:时间(生命周期) 从生命周期上讲,全局变量程序运行时创建、程序结束时销毁;普通的局部变量函数调用时创建、函数调用完成后销毁。 静态局部变量与静态全局变量都是静态的,生命周期与全局变量一致。 维度二:空间(作用域) 从作用域上讲,全局变量整个程序的源 阅读全文
posted @ 2022-01-11 17:00 Kisen 阅读(703) 评论(0) 推荐(0)
摘要: C++内联函数 c++内联函数提出的目的是节约栈空间。众所周知函数存放在栈中,而系统内存中栈空间是有限而宝贵的。由于有的时候一些简单的函数可能会大量占用栈空间,因此inline得以出现。 inline函数,即内联函数,本质上是编译器(注意,是编译器认定是否可以认定为内联函数)将inline关键字所限 阅读全文
posted @ 2022-01-11 16:45 Kisen 阅读(73) 评论(0) 推荐(1)
摘要: C++内存分配 静态存储区域 在编译阶段时,全局变量等静态变量就已经在静态存储区域完成初始化了。 栈 一般函数本身以及函数内部所有变量都会在栈上创建。函数执行结束后进行出栈。虽然效率很高但可惜的是内存中栈存储的空间有限。 堆 一般亦称动态内存分配,即在堆上分配内存空间供变量使用。程序员自我管理内存的 阅读全文
posted @ 2022-01-11 15:21 Kisen 阅读(37) 评论(0) 推荐(0)
摘要: 虚函数表是实现C++中实现多态的基础,当然也是实现虚函数的基础。 每一个类都独立拥有一个虚函数表,类中所有虚函数都以数组形式存放在该类的虚函数表中。 虚函数表在类的编译阶段就建立了,然而虚函数表指针——作为类的隐藏成员——却在运行期间当函数被调用时才完成初始化的。 阅读全文
posted @ 2022-01-11 13:59 Kisen 阅读(141) 评论(0) 推荐(0)
摘要: C++中多态的两种作用 主要从函数和类两个方面分析: 从函数角度切入,多态使得代码可以实现模块化,隐藏了实现细节,实现了代码重用; 从类的角度切入,多态使得类在继承和派生时,保证家族中任意实例的属性被正确调用。 C++中多态的本质是为了方便代码重用。 阅读全文
posted @ 2022-01-11 13:43 Kisen 阅读(758) 评论(0) 推荐(0)
摘要: C++中两个加号具有不同含义 第一个加号代表C++与C相比,添加了OOP等特性,添加了类、虚函数等结构。第一个加号代表特性上的扩充。 第二个加号代表C++添加了许多语法糖、标准库等等扩充和改进,使得C++比C更加易用。因此与C相比,C++更适合复杂系统设计和实际业务场景。 阅读全文
posted @ 2022-01-11 13:19 Kisen 阅读(634) 评论(0) 推荐(0)
摘要: C++中,虚函数分为纯虚函数和虚函数。 纯虚函数的作用只有一个,就是定义抽象类。 虚函数则提供两种提示: 在继承中,子类将重写父类中的虚函数,也就是说,虚函数在继承设计下将担任多态的实现; 子类中的重写函数将动态绑定父类中的虚函数 本质上,c++中虚函数的产生是为了实现OOP继承。 阅读全文
posted @ 2022-01-11 13:11 Kisen 阅读(85) 评论(0) 推荐(0)