C++改善_2016_11_21
2016-11-21 18:39
260 查看
Rule 01: 视C++为一个语言联邦: 1. C
2. Object-Oriented C++
3. Template C++
4. STL
Rule 02: 尽量以const, enum, inline替换 #define
//宁可以编译器替换预处理器
/*
#define ASPECT_RATIO 1.653
const double AspectRatio = 1.653;
*/
/*
当我们以常量替换#define时,有两种情况:
1. 定义常量指针,必须写两次const,比如:
const char* const authoName = "Scott Meyers";
2. class专属常量
为了将常量的作用域限制于class内,你必须让它成为class的一个成员,比如:
class GamePlayer{
private:
static const int NumTurns = 5;
int scores[NumTurns];
...
};
or
理论基础:一个属于枚举类型的数值可权充ints被使用
class GamePlayer{
private:
enum{ NumTurns = 5};
int scores[NumTurns];
...
};
(如果你不想别人获得一个pointer或reference指向你的某个整数常量,enum可以帮助你实现这个约束。)
(enum和#define一样绝不会导致非必要的内存分配)
个人觉得enum在类里的应用比static const更好
*/
#include <iostream>
#define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))
using namespace std;
template <typename T>
void f(T a)
{
cout << a << endl;
}
template<typename T>
inline void callWithMax(const T &a, const T &b)
{
f<T>(a>b?a:b);
}
int main()
{
int a = 5, b = 0;
CALL_WITH_MAX(++a, b);
cout << "a = " << a <<endl; // a被累加两次
CALL_WITH_MAX(++a, b+10) ;
cout << "a = " << a << endl; //a 被累加一次
cout << "b = " << b << endl; //b还是b
//a的累积次数竟然取决于 “它被拿来和谁比较”
int c = 5, d = 0 ;
callWithMax<int>(++c,d);
cout << "c = " << c << endl; //c被加一次
callWithMax<int>(++c, d+10);
cout << "c = " << c << endl; //c被加一次
cout << "d = " << d << endl;
//这样一个符合设计的本意,更合理
return 0;
}
//请记住:
// 对于单纯常量,最好以const对象或者enums替换#defines。
// 对于形似函数的宏(macros), 最好改用inline函数替换#defines。
2. Object-Oriented C++
3. Template C++
4. STL
Rule 02: 尽量以const, enum, inline替换 #define
//宁可以编译器替换预处理器
/*
#define ASPECT_RATIO 1.653
const double AspectRatio = 1.653;
*/
/*
当我们以常量替换#define时,有两种情况:
1. 定义常量指针,必须写两次const,比如:
const char* const authoName = "Scott Meyers";
2. class专属常量
为了将常量的作用域限制于class内,你必须让它成为class的一个成员,比如:
class GamePlayer{
private:
static const int NumTurns = 5;
int scores[NumTurns];
...
};
or
理论基础:一个属于枚举类型的数值可权充ints被使用
class GamePlayer{
private:
enum{ NumTurns = 5};
int scores[NumTurns];
...
};
(如果你不想别人获得一个pointer或reference指向你的某个整数常量,enum可以帮助你实现这个约束。)
(enum和#define一样绝不会导致非必要的内存分配)
个人觉得enum在类里的应用比static const更好
*/
#include <iostream>
#define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))
using namespace std;
template <typename T>
void f(T a)
{
cout << a << endl;
}
template<typename T>
inline void callWithMax(const T &a, const T &b)
{
f<T>(a>b?a:b);
}
int main()
{
int a = 5, b = 0;
CALL_WITH_MAX(++a, b);
cout << "a = " << a <<endl; // a被累加两次
CALL_WITH_MAX(++a, b+10) ;
cout << "a = " << a << endl; //a 被累加一次
cout << "b = " << b << endl; //b还是b
//a的累积次数竟然取决于 “它被拿来和谁比较”
int c = 5, d = 0 ;
callWithMax<int>(++c,d);
cout << "c = " << c << endl; //c被加一次
callWithMax<int>(++c, d+10);
cout << "c = " << c << endl; //c被加一次
cout << "d = " << d << endl;
//这样一个符合设计的本意,更合理
return 0;
}
//请记住:
// 对于单纯常量,最好以const对象或者enums替换#defines。
// 对于形似函数的宏(macros), 最好改用inline函数替换#defines。
相关文章推荐
- C++改善_2016_11_23
- C++改善_2016_11_28
- 2016 11 .21学习小记
- 改善C++ 程序的150个建议学习之建议11:将强制转型减到最少
- 改善C++ 程序的150个建议学习之建议21:尽量用new/delete代替malloc/free
- 数据结构——栈——2016_11_21
- →『C/C++ 笔试、面试题目大汇总[21-30]』
- C/C++笔试题(11)
- 60}的C程序 高手帮忙写下`` 46 35 27 21 16 10 9 5 然后输出数组a。已知 int a[11]={1 使数组a仍然有序 将x插入到有序整型数组a中 由键盘输入一个整数x
- SIP协议解析与实现(c和c++ 使用osip) 11
- 孙鑫C++视频笔记(11)图形的保存和重绘
- 重构 — 改善既有的类图设计 条款11:去除对聚合内部的引用
- Teach Yourself Visual C++ 6 in 21 Days(C++ 21天自学速成) 学习笔记
- Effective C++:改善程序技术与设计思维的55个有效做法(第三版)(中文版)(预订)Effective C++ 3RD
- ANSI/ISO C++ Professional Programmer's Handbook 11
- C++ FAQ 11
- More Effective C++之11
- 《C++捷径教程》读书笔记--Chapter 18--C++的I/O系统--7-11
- More Effective C++之21
- C++学习笔记(11)——虚函数的特性