首页| 论坛| 消息

标题:Qt开发经验小技巧236-240
作者:liudianwu
日期:2022-08-14 11:19
内容:

236. 关于在头文件中定义函数使用static关键字的血的教训。
- 有时候我们需要将一些常用函数写在一个文件中供很多地方调用,如果写的是 int doxxx{} 这种,在你多个地方引用的时候,肯定会编译报错提示 “重复定义” 的错误。
- 此时你需要在函数前面加上static关键字,变成 static int doxxx{} 这种,能够正常编译和运行,以为一切万事大吉,还是我太年轻。
- 如果仅仅是一个类中在使用,或者函数中没有静态变量,也不会出问题,问题就在static修饰的函数在每个引入头文件的时候都会拷贝一份,导致函数里面的static静态变量会重复初始化,这样就不正确了。
- 为了解决这个问题,终极办法就是在外面套个类,所有的函数和变量放到类中,完美,再也不会睡不着了,真香。
- 关于C/C++ 中的static关键字,建议大家参考这篇文章写得 https://zhuanlan.zhihu.com/p/37439983,醍醐灌顶。
```cpp
//文件名 test.h
//下面这个函数 编译报错提示 “重复定义”
void test() {}
//下面4个函数在每个引入头文件的时候都会被拷贝一份
static void test1() {}
inline void test2() {}
static inline void test3() {}
inline static void test4() {}
//保证没问题的写法
class tt {
void test() {}
static void test1() {}
inline void test2() {}
static inline void test3() {}
inline static void test4() {}
}
```
237. 在数据库查询中,一般会建立索引以便加快查询速度,比如常用的条件字段作为索引字段。但是有些时候如果查询语句没写好,就算where中有索引字段也会引起全表扫描,也就是说根本没用上索引,这点要积极的避免。
- 模糊查询like,全模糊 like '%...%' 和左模糊 like '%...' 无法直接使用索引,右模糊查询 like '...%' 会使用索引。
- 查询条件中含有is null的select语句执行慢,is not null 时永远不会使用索引,一般数据量大的表不要用is null查询。
- 不等于操作符 和 != 会限制索引,引起全表扫描,即使比较的字段上有索引。
- where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。
- select count(*) from table 这样不带任何条件的count会引起全表扫描。
- in 和 not in 也要慎用,否则会导致全表扫描,能用 between 就不要用 in。
..

回复 发表
主题 版块