const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令
**************常量必须被初始化*************************
cons的作用
(1)可以定义const常量 例如:
const int Max=100;
int Array[Max];
(2)便于进行类型检查 例如:
void f(const int i) { .........}
编译器就会知道i是一个常量,不允许修改;
(3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
还是上面的例子,如果在函数体内修改了i,编译器就会报错;
例如:
void f(const int i) { i=10;//error! }
(5) 为函数重载提供了一个参考。
class A
{
......
void f(int i) {......} file://一个函数
void f(int i) const {......} file://上一个函数的重载
......
};
(6) 可以节省空间,避免不必要的内存分配。
例如:
#define PI 3.14159 file://常量宏
const doulbe Pi=3.14159; file://此时并未将Pi放入ROM中
......
double i=Pi; file://此时为Pi分配内存,以后不再分配!
double I=PI; file://编译期间进行宏替换,分配内存
double j=Pi; file://没有内存分配
double J=PI; file://再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
(7) 提高了效率。
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
使用const
(1)修饰一般常量,常数组,常对象
修饰符const可以用在类型说明符前,也可以用在类型说明符后。 例如:
int const x=2; 或 const int x=2;
int const a[5]={1, 2, 3, 4, 5}; 或 const int a[5]={1, 2, 3, 4, 5};
class A; const A a; 或 A const a;
(2)修饰指针
const int *A; 或 int const *A; //const修饰指向的对象,A可变,A指向的对象不可变
int *const A; //const修饰指针A, A不可变,A指向的对象可变
const int *const A; //指针A和A指向的对象都不可变
(3)修饰引用
const double & v; 该引用所引用的对象不能被更新
(4)修饰函数的返回值:
const修饰符也可以修饰函数的返回值,是返回值不可被改变,格式如下:
const int Fun1();
const MyClass Fun2();
(5)修饰类的成员函数:
const修饰符也可以修饰类的成员函数,格式如下:
class ClassName
{
public:
int Fun() const;
.....
};
这样,在调用函数Fun时就不能修改类里面的数据
(6)在另一连接文件中引用const常量
extern const int i; //正确的引用
extern const int j=10; //错误!常量不可以被再次赋值
*******************放在类内部的常量有什么限制?
class A
{
private:
const int c3 = 7; // err
static int c4 = 7; // err
static const float c5 = 7; // err
......
};
初始化类内部的常量
1 初始化列表:
class A
{
public:
A(int i=0):i(i) {}
private:
const int i;
};
2 外部初始化,例如:
class A
{
public:
A() {}
private:
static const int i;
};
const int A::i=3;
分享到:
相关推荐
在C++编程中,`const`常量与`#define`宏定义是两种常见的定义常量的方法,但它们之间存在显著的区别,这些区别主要体现在编译器处理方式、类型和安全检查、存储方式以及对程序效率的影响上。 ### 1. 编译器处理方式...
本文将深入探讨C#中的变量和const常量的使用,帮助开发者更好地理解这两种数据存储方式的区别和应用场景。 首先,我们来谈谈变量。变量是程序中用于存储数据的容器,它的值可以在程序执行过程中改变。在C#中,声明...
在C语言中,`const`关键字是用来声明常量的,它的主要目的是为了保护变量的值不被意外修改,增加代码的稳定性和可读性。在深入理解`const`常量之前,我们需要先明白变量和常量的基本概念。变量是存储数据的容器,其...
在C++中,`const`关键字有着广泛的应用,它可以用于定义常量、修饰类的数据成员、指针以及函数参数和返回值。以下是关于`const`的一些详细解释: 1. **const 常量**: - `const int max = 100;` 定义了一个名为`...
"define宏定义和const常量定义之间的区别" Define宏定义和const常量定义是C语言中两种常用的常量定义方法,但它们之间有着本质的区别。 首先,我们来看一下define宏定义。Define宏定义是一种预处理指令,它可以...
在C/C++编程中,`const`常量和`#define`宏定义是两种常见的常量表示方法,但它们在处理方式、类型检查、存储方式、空间效率以及使用场景上存在显著区别。 首先,处理方式不同。`#define`宏是在预处理阶段进行文本...
在VBScript(Visual Basic Scripting Edition)编程语言中,`Const`关键字用于声明常量,这是一个非常基础且重要的概念。常量,正如其名,是在程序执行期间其值始终保持不变的变量,通常用来存储不可更改的数据,如...
1. const 常量 在 C++ 中,const 可以用来修饰变量,称为常量。例如:const int max = 100; 这种常量有数据类型,编译器可以对其进行类型安全检查,而宏常量没有数据类型,编译器只能进行字符替换,没有类型安全...
由于 const 常量有更多的优点,例如数据类型、类型安全检查、调试等,因此在 C++ 程序中,我们应该只使用 const 常量而不使用宏常量。这样可以提供更多的安全性和可靠性,减少编译时的错误。 const 和 #define 都...
### C语言中const定义常量 #### 一、引言 C语言作为一种广泛使用的编程语言,在软件开发领域占据着极其重要的地位。为了更好地理解和运用C语言中的特性,掌握`const`关键字的使用变得尤为重要。本文将详细介绍如何...
Const常量有数据类型,而宏常量没有数据类型,编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查。 例如,const int max = 100; 这里定义了一个const常量max,它的值是100,这个值在...
const 变量可以通过不同的方式初始化,如非指针 const 常量初始化和指针 const 常量初始化等。需要注意的是,在初始化 const 变量时,需要遵守 const 的规则,不能对 const 变量进行更改操作。 5. const 在函数声明...
extern关键字可以在另一个连接文件中引用const常量。例如,extern const int i; 声明了一个名为i的常量变量,并且可以在另一个文件中被引用。 4. 便于进行类型检查 const关键字可以使编译器对处理内容有更多了解。...
- 避免数值混淆:与宏定义类似,修改const常量会影响所有使用该常量的地方,降低了维护成本。 - 保护数据:const可以防止意外修改,增加程序的健壮性,如尝试修改const变量会引发编译错误。 - 函数重载:const...
JavaScript中的const关键字是一种用于声明常量的方式,它与let关键字类似,都是在ES6(ECMAScript 2015)版本中引入的新特性。const关键字提供了一种声明一个不可变的常量的能力,即一旦给const变量赋值之后,就不能...
但是,问题来了:当我们修改了常量类中的某个常量值时,例如将 `STR_CONST_1` 修改为 `"NotString1"`,但是 `SomeService` 依然输出 `"String1"`,而不是我们期望的 `"NotString1"`。这是因为 Java 编译器在编译时...
使用new分配的指针可以初始化为const常量: ```cpp const int* c = new int(10); // c指向了一个const int ``` 或者引用const常量: ```cpp const int& ref = b; // ref是const引用,引用了一个const变量 ``` 三...
然而,const常量实际上并不会被存储在程序的数据段中,而是存储在只读代码段(文本段),这意味着const常量的读取不需要运行时的内存访问,从而提升了访问速度。 9. const在实际编程中的应用:理解const的不同用途...
1. 定义const常量:通过const关键字可以定义一个常量,该常量在程序运行过程中值不可被更改。这对于提高代码的可读性和可维护性非常有帮助。 2. 类型检查:使用const定义的变量将被编译器检查,如果程序试图改变一...
- **编译器处理方式**:宏定义发生在预处理阶段,而const常量在编译和运行阶段使用。 - **类型和安全检查**:宏定义不检查类型,仅做文本替换;const常量在编译阶段会进行类型检查,保证安全性。 - **存储方式**...