主页

C++内联inline函数失效的几种情况与分析

写在前面 参考: Effective C++ Item30 Inside the C++ Object Model 4.5 inline Functions gcc之inline关键字(汇编角度查看内联) ; 事实上现代的 C++编译器已经可以智能优化代码了, 并不需要 inline 来刻意处理了, 这里只是为了学习这种历史遗留下来的优化方法以及 inline 的一些可能会失效的情况. inline 的处理 第一阶段: 分析函数定义, 以决定函数的本质 inline 能力(与编译器相关的能力) 如果函数因为复杂度等原因不能恒伟内敛, 就会被转为一个 static 函数, 并在’被编译模块’内产生对应的函数定义. 第二阶段 真正的 inline ...

阅读更多

深度探索c++对象模型笔记(第四章)成员函数语义学

写在前面 一般来说, 类的成员函数有三种: 非静态成员函数(当然也是非虚函数) 静态成员函数 虚成员函数 第一种需要 this 指针(通常是在函数的第一个参数位置传入)以联系类对象. 非静态成员函数 #include <cstdio> class B { public: B() { printf("%s default-ctor\n", __func__); } B(const B &) { printf("%s copy-ctor\n", __func__); } B &operator=(const B &) { printf("%s...

阅读更多

C++中的三种访问级别与继承下的情况总结

写在前面 写一下访问控制部分的总结, 内容来自 C++Primer5ed. 加上了一点自己的理解和例子, 方便大家学习. 文中的例子都在 clang++ 16 (MacOS13.4 arm64) 下运行测试通过. 总览 总体认知 public: 能被所有用户 (类内成员 / 对象 / 友元) 访问 protected: 能被 派生类成员 / 友元 访问 private: 能被 类内成员 / 友元 访问 这里最不好理解的就是 protected 级别, 因为这个级别既像 public(在派生类中)又像 private(在类的实例对象中). 具体认知: protected 和私有成员类似, 受保护成员对类的用户(对象)来说不可访问 和公有成员类似,...

阅读更多

Sql题目总结

写在前面 预备知识 联结(join) SQL最强大的功能之一就是能在数据检索查询的执行中联结(join) 表。联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结 及其语法是学习SQL的一个极为重要的组成部分。 – MySQL 必知必会 外键(foreignkey) 外键为某个表中的一列,它包含另一个表 的主键值,定义了两个表之间的关系。 联结是一种机制,用来在一条SELECT 语句中关联表,因此称之为联结。使用特殊的语法,可以联结多个表返 回一组输出,联结在运行时关联表中正确的行。 通过相等的值连接两个表的方法为等值联结(equijoin),它基于两个表之间的 相等测试。这种联结也称为内部联结。 典型题目 1251. 平均售价;...

阅读更多

字典树力扣题目总结

背景 前缀树, 字母树. 实现 208. 实现 Trie (前缀树);剑指 Offer II 062. 实现前缀树 - 力扣(Leetcode); class Trie { Trie *next[26]; bool is_end; public: Trie() : next(), is_end(false) { } Trie *helper(string word) { auto cur(this); for (auto c : word) { if (!cur) return nullptr; cur = cur->...

阅读更多

记忆化搜索与动态规划专题力扣题目总结

写在前面 很多动态规划的题都是先记忆化然后才去使用递推优化(动态规划), 直接想确实是比较难, 正如0x3f所说, 记忆化搜索是自动挡, 写起来比较方便, 动态规划是手动挡, 需要自己去找规律. 记忆化搜索 这部分内容很多, 几乎所有的动态规划都是可以直接用记忆化搜索的, 例如最基本的斐波那契和爬楼梯等题目: 1140. 石子游戏 II; 1048. 最长字符串链; 1262. 可被三整除的最大和 - 力扣(Leetcode);(数据范围小, 可贪心, 正难则反) 1595. 连通两组点的最小成本 - 力扣(Leetcode); 记忆化搜索+状态压缩 DP 6893. 特别的排列 - 力扣(Leetcode); 996. 正方形数组的数目 - 力扣(...

阅读更多

深度探索c++对象模型笔记(第二章)构造函数语义学

写在前面 默认构造函数 编译器生成非平凡默认构造函数的四种情况 带有默认构造函数的成员类对象 带有默认构造函数的基类 带有一个虚函数的类 带有一个虚基类的类 下面会分析四种情况 带有默认构造函数的成员类对象 class Foo { public: Foo() { printf("%s\n", __func__); } }; class Bar { public: // 生成默认构造 Foo foo; // 将 Bar::foo 初始化是编译器的责任 char *str; // str初始化要让程序员来做 }; // 可能的实现 // inline Bar::Bar() { foo.Foo::...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits