C++改善_2016_11_21

本文探讨了C++编程中的一些核心原则,包括将C++视为语言联邦的概念,提倡使用const、enum及inline替代#define宏定义,并通过示例展示了如何正确地进行宏定义与内联函数的替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值