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. 平均售价;...
深度探索c++对象模型笔记(第三章)数据成员语义学
写在前面
绑定
藝術
数据成员的内存布局
#include <bits/stdc++.h>
using namespace std;
struct P {
char c;
int x;
};
void t1() {
P p;
p.c = 'a';
p.x = 10;
printf("%p\n", &p);
printf("%p\n", &p.c);
printf("%p\n", &p.x);
// 0x16b97e760
// 0x16b97e760
// 0x16b97e764
for (int i{}; i < 5; ++i)
...
记忆化搜索与动态规划专题力扣题目总结
写在前面
很多动态规划的题都是先记忆化然后才去使用递推优化(动态规划), 直接想确实是比较难, 正如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::...
共计 465 篇文章,59 页。
您是Zorch的第 个小伙伴
Hits