随笔分类 - C++重点 / C++基础语法
摘要:# 134.为什么C++没有垃圾回收机制?这点跟Java不太一样 1. 性能:垃圾回收机制需要额外的内存和计算资源,这会引入一定的开销。C++的设计目标之一是提供高效的性能,垃圾回收机制可能会对程序的性能产生负面影响。因此,C++没有内置的垃圾回收机制,以便程序员自行管理内存等资源。 2. 控制:C
阅读全文
摘要:133.为什么不能把所有的函数写成内联函数? 内联是用 “空间换时间”,滥用会导致代码体积爆炸,反而更慢,还会带来其他问题。 1. 代码膨胀(最主要原因) 内联函数会在每一个调用的地方直接展开,不产生函数调用。 如果一个函数被调用 1000 次,就会插入 1000 份副本。 函数越多、越复杂 → 可
阅读全文
摘要:132.delete和delete[]区别? delete 用于释放单个对象;delete [] 用于释放数组对象,必须配对使用。 1. 最根本区别 delete 调用 1 次析构函数,然后释放内存 对应:new delete[] 调用 N 次析构函数(数组每个元素一次),然后释放内存 对应:new
阅读全文
摘要:# 131.介绍一下几种典型的锁 **读写锁** - 多个读者可以同时进行读 - 写者必须互斥(只允许一个写者写,也不能读者写者同时进行) - 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) **互斥锁** 一次只能一个线程拥有互斥锁,其他线程只有等待 互斥锁是在抢锁失败的情况
阅读全文
摘要:# 130.hello.c 程序的编译过程 以下是一个 hello.c 程序: ```C++ #include int main() { printf("hello, world\n"); return 0; } ``` 在 Unix 系统上,由编译器把源文件转换为目标文件。 ``` gcc -o
阅读全文
摘要:# 129.动态编译与静态编译 ## 1.静态编译 静态编译是将程序代码和库函数一起编译成一个可执行文件的过程。在静态编译过程中,程序代码和库函数的代码被组合在一起,形成一个独立的可执行文件,该文件可以在任何系统上运行,因为它包含了所有所需的代码和库函数。 ### 1.1优点: 1.程序在运行时不需
阅读全文
摘要:# 128.用C语言实现C++的继承 ```C++ #include using namespace std; //C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout fun(); //调用父类的同名函数 p1 = &b
阅读全文
摘要:# 127.友元函数和友元类的基本情况 友元提供了不同类的成员函数之间、类的成员函数和一般函数之间进行数据共享的机制。通过友元,一个不同函数或者另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。
阅读全文
摘要:126.友元函数在类内部声明还是内外? 1.什么是友元 友元是一种授权机制:允许外部函数 / 其他类,访问某个类的 private /protected 成员。 友元不是类的成员,只是被 “破例允许访问”。 2.友元函数 友元函数是 C++ 中一种打破类封装限制的机制,允许一个非成员函数访问类的 p
阅读全文
摘要:# 125.C++从代码到可执行程序经历了什么? ## 1.预编译 主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下: 1. 删除所有的#define,展开所有的宏定义。 2. 处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。
阅读全文
摘要:# 124.什么是一致性哈希? **一致性哈希** 一致性哈希是一种哈希算法,就是**在移除或者增加一个结点时,能够尽可能小的改变已存在key的映射关系** 尽可能少的改变已有的映射关系,一般是沿着顺时针进行操作,回答之前可以先想想,真实情况如何处理 一致性哈希将整个哈希值空间组**织成一个虚拟的圆
阅读全文
摘要:# 123.你知道回调函数吗?它的作用? 1.当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数; 2.回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。为此,你需要做三件事:1,声明;2,定义;3,设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数
阅读全文
摘要:# 122.成员函数里memset(this,0,sizeof(*this))会发生什么 有时候类里面定义了很多int,char,struct等c语言里的那些类型的变量, 可以在构造函数中将它们初始化为0,但是一句句的写太麻烦,所以直接就memset(this, 0, sizeof (*this))
阅读全文
摘要:121.static_cast比C语言中的转换强在哪里? static_cast 是安全、可控、编译期检查更严格的转换,不会偷偷干危险操作;C 风格强转是 “万能暴力转”,隐患大、可读性差、不易排查。 1. 更安全:不会乱转,危险转换直接拒绝 C 强转什么都能硬转: const int a = 10
阅读全文
摘要:# 120.strcpy函数和strncpy函数的区别?哪个函数更安全? 1.函数原型 ```C++ char* strcpy(char* strDest, const char* strSrc) char *strncpy(char *dest, const char *src, size_t n
阅读全文
摘要:# 119.模板会写吗?写一个比较大小的模板函数 本程序适合char、int、float类型数据进行比较,差距小于0.01视为相等 ```C++ #include #include using namespace std; //本程序适合char、int、float类型数据进行比较,差距小于0.01
阅读全文
摘要:# 118.main函数的返回值有什么值得考究之处吗? main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出。返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。 ## 1.void main() 有一些书上的,都使用了void main( ) ,其实这是错误的。C
阅读全文
摘要:117.你知道Debug和Release的区别是什么吗? Debug 用于调试,带调试信息、不优化;Release 用于发布,无调试信息、全优化、体积小、速度快。 1. 核心区别(最常考 5 点) 优化级别 Debug:不优化,方便逐行调试 Release:高度优化(速度 / 体积最优) 调试信息
阅读全文
摘要:115.如何阻止一个类被实例化?有哪些方法? 核心目的:让编译器无法调用构造函数。 方法 1:将构造函数声明为 private(最经典) class A { private: A() {} // 构造私有 }; // A a; // 错误,无法实例化 方法 2:将构造函数 = delete(C++1
阅读全文
摘要:116.如何禁止程序自动生成拷贝构造函数? 在 C++ 里,想禁止编译器自动生成拷贝构造、拷贝赋值,有三种常用写法,我按现代 C++ 推荐程度给你排好序: 1. C++11 最推荐:= delete(首选) 直接告诉编译器:禁止生成,也禁止调用 class Test { public: Test()
阅读全文

浙公网安备 33010602011771号