C++中的const解读

简介: C++中的const解读 一.const常量与宏常量相比的优势 1.const常量有数据类型,而宏常量没有数据类型; 2.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查; 3.在宏常量的使用过程中,字符替换时可能会产生意料不到的错误; 二.为什么不能在类声明中初始化const数据成员? class {    const int nCount;     };   因为类的对象未被创建时,编译器不知道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++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
356 2
|
编译器 C++
C++中的内联函数与const限定词的使用
C++中的内联函数与const限定词的使用
136 1
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
89 1
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
160 2
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
编译器 C++
【C++】:const成员,取地址及const取地址操作符重载
【C++】:const成员,取地址及const取地址操作符重载
197 0
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
设计模式 安全 C++
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
477 2