Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189409
  • 博文数量: 54
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-02 18:41
文章分类

全部博文(54)

文章存档

2011年(1)

2009年(30)

2008年(23)

我的朋友

分类: C/C++

2008-11-20 11:01:40

用预处理#define声明一个常数用以表示1年中有多少秒(忽略闰年):
#define SECONDS_PER_YEAR (60*60*24*365)UL
考察两点:
 (1)预处理器会自动计算常数表达式值,因此写出计算过程更加有意义。
 (2)这个表达式值会使一个16位机整型溢出因此用UL(表示无符号长整型)。


写一个“标准”宏MIN,这个宏输入两个参数返回较小的一个:
 #define MIN(a,b) ((a)<=(b)? (a) : (b))
考察两点:
 (1)三目运算符(?:)使编译器能产生比if-then-else更优化的代码。
 (2)在宏中要小心的把所有参数用括号括起来。


const的用途:
 C中,const主要用于定义常量,修饰函数参数,修饰函数返回值等3个用途。
 C++中,const还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中数据成员。
 答:
 (1)可以定义const常量。
 (2)const可以修饰函数的参数和返回值,甚至是函数定义体,被const修饰的东西受到强制保护,可以预防以外变动,提高程序健壮性。


const与#define区别:
 (1)const常量有数据类型,宏常量则没有。编译器可以对const常量进行类型检查,对宏常量则只进行简单的字符替换。字符替换中容易产生意料不到的错误。
 (2)有些集成化的调试工具可以对const常量进行调试,但不能调试宏常量。c++程序中用const常量完全取代宏常量。


看下面程序sizeof结果:#include
using namespace std;
class B
{
 virtual void p(); //虚函数指针4
};
class A:public virtual B
{
public:
 char c;  //4
 float d; //4
 float a; //4
 int b;  //4
};
void main()
{
 cout<}
注意:(1)、内存对齐。(2)、类A虚继承于B,涉及虚函数表,隐含一个指向虚函数表的指针。


注意下面inline用法:
#include
using namespace std;
inline f(float i) //不用写返回值类型
{
 return i*i;
}
void main()
{
 float i=1.5;
 cout<}
inline内敛函数要做参数类型检查,这是inline跟宏相比的优势。
inline一般只用于如下情况:
(1)、一个函数不断被重复调用。
(2)、函数只有简单的几行,且函数内不包含for,while,switch语句。

 

 

阅读(972) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~