- 博客(365)
- 资源 (8)
- 收藏
- 关注
原创 《C++ Primer 第五版》const 成员函数
在 C++ 中,每个非静态成员函数都有一个隐藏的参数。const 对象只能调用 const 成员函数。指针本身不可改,但可以修改指向对象的内容。“这个函数不会修改对象本身的任何成员。的类型变化 → 指向只读对象。非 const 成员函数 =或 非const 成员函数。假设我们有一个函数只用来。:放心,我不会改对象,指向的对象也不可改(
2025-09-13 17:25:20
21
原创 《C++ Primer 第五版》this 指针 (上)
场景示例说明区分同名形参左边是成员,右边是形参返回当前对象本身访问当前对象成员一般可省略this->
2025-09-13 16:54:29
101
原创 《C++ Primer 第五版》this 指针 (下)
this内容解释this指向当前对象的指针类型,如果在const函数中是常见用法1. 区分成员和同名形参 2. 返回*this实现链式调用 3. 传递当前对象地址。
2025-09-13 16:47:08
40
原创 《C++ Primer 第五版》函数指针的几种写法总结
最原始的办法:缺点是类型写法冗长,尤其在容器里。3. decltype(&函数名)直接从函数推断出指针类型:这样避免手写参数列表,尤其在函数签名很复杂时很有用。利用 里的模板元编程工具:好处:在模板代码里很灵活(比如先拿到函数类型,再转成指针)。如果不介意一点性能开销,可以用更现代、更安全的 :优点:支持函数指针、lambda、仿函数,多态性更强。缺点:比裸函数指针多一次封装,性能略低。如果你有很多不同签名的函数,可以封装成模板:这样写高度通用,尤其适合库代码。
2025-09-05 15:12:08
336
原创 《C++ Primer 第五版》auto和deltype用于函数指针类型
auto(同数组会退化为指针),除非你用引用类型auto&auto&&。若expr是(变量或函数名),decltype给出声明的类型(函数名 →函数类型,不是指针)。否则,如果expr是返回T&;是返回T&&;是返回T。小结:用auto想要“变量能直接用”的函数指针通常最方便;用decltype想要“得到函数的(或引用/指针)”时更精确,但要注意括号和是否是 id-expression 的差别。
2025-09-05 14:46:45
585
原创 写一个合法的 SSH 服务端口扫描器
最多同时开,并发去跑check_port这个函数。每个线程负责一个 IP(或一个端口连接尝试)。如果你只扫描一个 IP,线程池不会真的开满 100 个线程,只会跑 1 个任务。如果你扫描一个大网段,比如,那就会有很多任务排队,最多并行 100 个。
2025-09-03 14:28:37
165
原创 《C++ Primer 第五版》c++的调试方法
C++ 调试就像侦探办案:日志是“目击者证词”,调试器是“现场显微镜”,内存工具是“警犬嗅探器”,性能工具是“测速仪”。你要善于组合使用,才能快速锁定“真凶”。
2025-09-02 16:13:47
757
原创 《C++ Primer 第五版》assert 宏 和 NDEBUG 预处理宏变量
如果为假 → 向标准错误输出报错信息(表达式、文件名、行号),并调用。就像你写代码时的“安全带”,确保某个假设为真,否则立刻报警停车。就像把安全带“剪掉”,让车可以随便跑,不会因为警报停下来。宏在编译阶段就会被替换掉,不会有任何运行时开销。Release 模式下它可能被编译掉,完全没效果。发布阶段:去掉安全带,车能跑得更快,但要自己负责。如果为真 → 什么都不做,继续执行。用法:调试阶段开着,发布阶段关掉。调试阶段:戴上安全带,保护自己。:调试时验证假设,失败就中断。,即什么都不做,彻底失效。
2025-09-02 16:06:26
543
原创 C的调试手段总结(二)非入侵式
如果if条件非常稀有,可能一天才触发一次。如果你用 gdb 一直挂着等待,那几乎不可行(既影响系统,又很难等)。这种场景下,我们就不适合用“交互式调试器实时盯着”。在 Linux 下,常用的做法是用。
2025-09-02 14:42:12
23
原创 《C++ Primer 第五版》内联函数和constexper函数
inline就像你写作业时,把常用的公式抄到草稿纸上,方便随时用,不用每次都去翻课本。constexpr就像老师在考试前直接给你算好了一部分答案,你带着结果进考场(编译期就确定)。特性inlineconstexpr本质展开函数,省去调用开销编译期求值,生成常量执行时间运行时尽可能编译期是否隐含 inline否是场景短小函数常量计算、模板参数✅一句话记忆inline是“复制粘贴函数体”,让运行时更快。constexpr是“编译器提前算答案”,让常量在编译期就确定。
2025-09-02 14:01:35
414
原创 工程案例:通过getpid() 解决工程SSH(dropbear)主进程异常退出问题
在守护进程启动时(全局变量,或填入现有的),后续用判断。在m_close()与中使用该判定;如果 master_pid 未设置,应保守处理(不要盲目 exit 整个进程)。
2025-08-30 11:55:04
38
原创 getpid(); 放在 调用 daemon() 之前比较合适还是那里比较合适
如果你愿意,我可以帮你画一个完整初始化流程的 master/sub 进程图,标出 PID 记录点和子进程退出逻辑,让这个改动更安全。,不是你原来的 master PID(虽然守护后的子进程才是真正的 master,但要明确哪个进程才算 master)。,你拿到的 PID 可能是父进程,而父进程可能马上退出,导致。只有守护化后的进程才是真正意义上的 master。明确 master PID,主进程不会被误杀。,确保它指向真正的守护监听进程,而不是父进程。,你拿到的 PID 可能是。,子进程成为新的主进程。
2025-08-30 11:49:17
181
原创 《C++ Primer 第五版》默认实参初始值
名字解析:在函数声明处完成,决定默认参数“绑定到哪个变量/函数”。表达式求值:在函数调用处发生,用的是绑定对象的当前值。局部同名变量不会改变默认参数绑定,因为解析已经固定在声明处的作用域。📌 所以看到的现象:改变def(全局变量) → 默认实参生效变化定义局部wd(只是隐藏了全局 wd) → 默认实参依然用全局的 80。
2025-08-28 17:45:52
396
原创 《C++ Primer 第五版》 默认实参
就是在函数声明或定义的时候,给参数一个默认值。调用时如果调用者没传这个参数,编译器就会用默认值来补上。\n";greet();编译器在调用点帮你“自动填补参数”。
2025-08-28 17:17:06
157
原创 《C++ Primer 第五版》函数重载
👉同一个作用域下,有多个函数,名字相同,但参数列表不同,编译器会根据调用时传入的参数来决定调用哪个函数,这就叫函数重载。print(10);// 调用 print(int)// 调用 print(double)// 调用 print(string)
2025-08-28 14:21:16
178
原创 《C++ Primer 第五版》int (*func())(int,int) 和 int (*func)(int,int) 区别剖析
写法func 是什么返回/指向什么使用场景变量指向函数直接存函数指针,调用或切换函数函数返回函数指针工厂函数/策略选择/返回可调用逻辑✅关键点()的存在决定了 func 是函数而不是变量。所以是正确的写法,用于函数返回函数指针。如果你写成,表示的是函数指针变量,二者不可混用。
2025-08-27 16:26:36
24
原创 《C++ Primer 第五版》 函数指针、返回函数指针、回调函数、普通函数调用 之间的关系理顺
类型声明示例本质用途普通函数可被调用的代码直接调用函数指针变量保存函数地址的变量动态调用,回调回调函数参数是函数指针把逻辑传给别人执行返回函数指针函数返回函数指针工厂函数 / 策略选择 / 延迟调用是否是函数指针变量和调用顺序函数本身 → 可以直接调用,也可取地址。函数指针变量 → 保存函数地址,间接调用。回调 → 函数指针作为参数传递。返回函数指针 → 函数返回函数指针,得到指针后再调用。
2025-08-27 16:22:51
29
原创 《C++ Primer 第五版》深度剖析对比:int* func()、int (*func())[5]、int (*func())(int,int)
声明含义指向/返回的是什么运算性质常见用途函数返回int*数据元素或数组首元素地址+1增加返回单元素地址、动态内存函数返回int (*)[5]指向整个int[5]数组+1增加返回固定大小数组的地址(较少见)函数返回指向函数(代码)不参与数据算术,可被调用返回某个可调用逻辑(策略/回调选择)
2025-08-27 16:19:43
26
原创 《C++ Primer 第五版》什么情况下返回的引用无效?什么情况下返回常量的引用无效?
引用类型无效情况普通引用T&1. 指向局部变量返回后2. 指向临时对象3. 指向已释放/已删除的内存常量引用const T&1. 指向局部变量返回后2. 指向临时对象返回后(局部临时对象)3. 指向已释放/已删除的内存关键区别const引用可以绑定到临时对象,并延长临时对象的生命周期到引用作用域,但不能跨函数返回临时对象的引用。普通引用不允许绑定临时对象。
2025-08-27 14:09:17
313
原创 《C++ Primer 第五版》不要返回局部对象的引用或指针
局部变量在栈上,函数结束即销毁;别把引用/指针带出去,否则就是悬空雷。⚡️所以,不要返回局部对象的引用或指针,因为函数返回后局部变量生命周期结束,引用/指针会指向无效内存,导致未定义行为。而正确做法是:用静态局部变量堆分配值返回或传出参数。
2025-08-26 17:41:38
447
原创 《C++ Primer 第五版》initializer_list 涉及到的范围 for 循环(range-based for) 的语义差别
→elem是 const std::string&,高效,不拷贝。→elem是 std::string,每次都会拷贝,效率低。所以,一般遍历时推荐用引用,除非你明确需要拷贝。
2025-08-26 16:34:06
365
原创 《C++ Primer 第五版》省略符号(...)
C 的...= “袋子”,丢多少个参数进去都行,但取出来要小心(用va_arg),类型不安全。C++ 的...= “魔法展开符”,可以把一包模板参数展开成一串,既灵活又安全。C++17 之后,还能写折叠表达式,更简洁。👉 形象比喻:C 的...像是快递袋子,里面放什么快递员不管,你自己拆开得对照单子,不然拆错了就坏了。C++ 的...像是拼装积木,编译器帮你一块块展开拼起来,不会出错。
2025-08-25 18:02:19
179
原创 《C++ Primer 第五版》 initializer_list
{}花括号背后的秘密。常用在容器初始化和函数参数传递。本质:指针 + 大小,只读轻量容器。优点:让 C++ 初始化和调用看起来更简洁,像脚本语言。一句比喻:就像一次性快餐盒花括号{}放进什么,它就原封不动地打包。你可以拿来吃(遍历),但不能往里面加菜(只读)。盒子本身很轻,拷来拷去都没问题。
2025-08-25 17:11:52
334
原创 《C++ Primer 第五版》main 函数里处理命令行选项
带或--的东西,例如-v-o out.txt。-v-o;-abc等价于-a -b -c。--help。:不带的位置参数,例如里的。--,之后的一切都当作“位置参数”,不再当选项解析(即使以开头)。argcargvargc是参数数量,argv是 C 字符串数组。
2025-08-25 16:43:34
342
原创 《C++ Primer 第五版》多维数组的传参
二维数组在内存里是的 6 个int也就是“这点决定了:编译器要知道“”,才能算偏移量i*cols + j。这就是传参时为什么“必须知道(至少)最内层维度”的根本原因。
2025-08-25 15:15:02
405
原创 《C++ Primer 第五版》引用形参什么时候应该是常量引用?如果形参应该是常量引用,而我们将其 设为了普通引用,会发生什么情况?
能用const&就别用只读、避免拷贝 → 用const&确实需要修改实参 → 用错误写法的后果实参可能被无意修改(逻辑 bug)无法传临时对象/字面量(接口受限)语义不清晰(可维护性差)
2025-08-25 09:59:30
380
原创 《C++ Primer 第五版》 const实参和形参(下)
const 引用 = 只读别名可以接收常量、临时对象(延长生命周期),这点普通引用做不到函数参数里用const &是最佳实践(高效 + 通用)函数返回用const &表示“只读访问”,但要注意别返回局部变量的引用(会悬空!声明能不能改原值能不能接临时值int& r✅ 可以改❌ 不行❌ 不能改✅ 可以。
2025-08-22 14:23:58
97
原创 《C++ Primer 第五版》 const实参和形参(上)
const 形参= 承诺 “不会改”实参传给 const 形参= 没问题(放宽要求)const 实参传给非 const 形参= 错误(收紧要求)const 修饰指针:看离谁近→ *p 不能改,p 能改→ *p 能改,p 不能改→ *p 不能改,p 也不能改。
2025-08-22 14:13:43
157
原创 《C++ Primer 第五版》C++ 参数传递机制
方式机制修改是否影响实参使用场景传值 (by value)拷贝一份实参给形参❌ 不影响当只需要读取值、不希望改变原始对象时传引用 (by reference)形参是实参的别名✅ 直接影响当函数需要修改实参,或拷贝代价太大时。
2025-08-21 11:13:58
236
原创 《C++ Primer 第五版》C/C++函数指针在实际项目里常见的典型用法
标准库回调qsortbsearch状态机/事件表驱动插件机制/驱动接口表中断/信号处理(嵌入式/OS)库的回调机制(OpenSSL、libevent 等)命令解析器/调度器。
2025-08-20 19:29:15
52
原创 套接字总结
(有时也需要用 sros 封装,否则文件描述符直接暴露),而是用通用 IO API,这也要封装)(如果 TCP 协议相关也要覆盖)(BSD 系/ macOS)(套接字非阻塞/标志设置)(很多库代码不会显式用。使用,建议一起替换)
2025-08-20 16:21:28
40
原创 《C++ Primer 第五版》C/C++函数的指针的函数调用
和“指向变量的指针”一样,函数指针保存的是函数入口地址。它的类型必须完整描述函数的参数列表和返回值类型。有两种写法,等价:为什么两者都行? 这个调用运算符可以作用在“函数”或“指向函数的指针”上;当你写 时,编译器会把 当作 处理。在 C 标准库里,/ 等都需要回调函数指针: 修饰的是指针本身,不是函数(函数不是对象)。非静态成员函数有隐式 参数,类型不同:不能把 赋给 。需要给 C 接口传回调时,常用 lambda/std::bind 适配,或改为
2025-08-20 10:58:23
337
软件开发工具实验-数制转化.rar
2021-01-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人