保留条件表达式的第一个值
// CE: condition expression, RETAIN: 保持
#define CE_RETAIN1(a, b) ((a) ? (a) : (b))
考虑一个情况, 当一个值有效时, 使用它, 否则使用另外一个数
如果直接写的话, 不太容易理解
(exp) ? (exp) : -1;
当exp非常长的时候(或许可以保存成变量, 但是某些情况下, 不知道该用什么名字
而自己比较常用变量名差不多用光了, 或者这只是个只用一次的值), 如
val = func(a) * i + 10 ? func(a) * i + 10 : -1;
而如果用宏定义的话就比较清晰了
val = CE_RETAIN1(func(a) * i + 10, -1);
PS: 但是如果的确出现表达式过长的情况, 可能考虑优化代码是最好的解决方案
直接面向结果的函数
void show() { setvisible(true); }
void hide() { setvisible(false); }
使用show(), hide()的情况下, 一目了然, 而通过参数的话, 理解会稍麻烦一些
getInstance
getInstance多数情况下作为一个类的公有接口, 用于获得一个实例
普通的书写方案如下
class A{
int i; // 不仅仅是数据, 也可能是一个类
public:
int& getInstance() { return i; }
};
使用这种方式的情况会存在两个问题
- 即使我从不使用i, 也从未掉用过getInstance这个函数, 但依旧给i分配了空间
- i依旧能在其他接口中被访问
上述两种情况并不一定会造成影响, 但可以考虑排除这种隐藏问题
int& getInstance() {
static int i;
return i;
}
静态变量在未被访问过的情况下, 不会分配空间
并且只存在于当前作用域, 有良好的安全性
保存变量
局部变量速度优于函数调用, 类似如果频繁用到数组的长度, 可以使用变量保存.size()的值