C++中的const解读

C++中的const解读

一.const常量与宏常量相比的优势

1const常量有数据类型,而宏常量没有数据类型;

2.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查;

3.在宏常量的使用过程中,字符替换时可能会产生意料不到的错误;

二.为什么不能在类声明中初始化const数据成员?

class {

   const int nCount;

 

 

}

 

因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。

三.如何理解类中的const数据成员的意义呢?

const数据成员只是:针对某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。

四.如何对类中的const数据成员进行初始化?

class A

 {

         const int size = 100;    //错误

         int array[size];           //错误,未知的size

 }

五.如何建立在整个类中都恒定的常量?

应该使用类中的枚举常量来实现。具体如下:

 class A

 {…

   enum {size1=100, size2 = 200 };

   int array1[size1];

   int array2[size2];  

}

枚举常量不会占用对象的存储空间,他们在编译时被全部求值。

六.使用枚举变量的缺点是什么?

1.枚举常量的隐含数据类型是整数;

2.其最大值有限;

3.只能表示为整数,且不能表示浮点数,字符串等;

七.引用const常量使用需要注意什么?

A f;

const A& e = f;

e只能访问声明为const的函数,而不能访问一般的成员函数;

八.对于非内部数据类型的输入参数,将值传递的方式改为const引用传递有什么好处?

目的是为了提高效率。例如:将void Func(A a)改为void Func(const A &a)

 

九.对于内部数据类型的输入参数,不要将值传递的方式改为“const引用传递,为什么?

既达不到提高效率的目的,又降低了函数的可理解性。

例如void Func(int x)不应该改为void Func(const int &x)

 

十.如何初始化类内部的常量?

很常见的方法就是初始化列表:
class A
{
public:
A(int i=0):test(i) {}
private:
const int i;
}

十一.const在成员函数中的三种用法

1.参数;

2.返回值;

3.函数;

十二.使用const的一些建议

 

1.除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

2.不要轻易的将函数的返回值类型定为const

3.在参数中使用const应该使用引用或指针,而不是一般的对象实例

你可能感兴趣的:(C++,c,存储,Class,编译器)