`
geke260
  • 浏览: 13993 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

const常量

阅读更多
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宏定义的区别

    在C++编程中,`const`常量与`#define`宏定义是两种常见的定义常量的方法,但它们之间存在显著的区别,这些区别主要体现在编译器处理方式、类型和安全检查、存储方式以及对程序效率的影响上。 ### 1. 编译器处理方式...

    C#变量和const常量的使用

    本文将深入探讨C#中的变量和const常量的使用,帮助开发者更好地理解这两种数据存储方式的区别和应用场景。 首先,我们来谈谈变量。变量是程序中用于存储数据的容器,它的值可以在程序执行过程中改变。在C#中,声明...

    C语言程序设计(第2版)-2期 拓展知识2-1 const常量.pdf

    在C语言中,`const`关键字是用来声明常量的,它的主要目的是为了保护变量的值不被意外修改,增加代码的稳定性和可读性。在深入理解`const`常量之前,我们需要先明白变量和常量的基本概念。变量是存储数据的容器,其...

    Const 用法小结

    在C++中,`const`关键字有着广泛的应用,它可以用于定义常量、修饰类的数据成员、指针以及函数参数和返回值。以下是关于`const`的一些详细解释: 1. **const 常量**: - `const int max = 100;` 定义了一个名为`...

    define宏定义和const常量定义之间的区别

    "define宏定义和const常量定义之间的区别" Define宏定义和const常量定义是C语言中两种常用的常量定义方法,但它们之间有着本质的区别。 首先,我们来看一下define宏定义。Define宏定义是一种预处理指令,它可以...

    C/C++:const常量与define宏定义的区别

    在C/C++编程中,`const`常量和`#define`宏定义是两种常见的常量表示方法,但它们在处理方式、类型检查、存储方式、空间效率以及使用场景上存在显著区别。 首先,处理方式不同。`#define`宏是在预处理阶段进行文本...

    VBS基础篇 - Const 常量

    在VBScript(Visual Basic Scripting Edition)编程语言中,`Const`关键字用于声明常量,这是一个非常基础且重要的概念。常量,正如其名,是在程序执行期间其值始终保持不变的变量,通常用来存储不可更改的数据,如...

    C++中const用法全解

    1. const 常量 在 C++ 中,const 可以用来修饰变量,称为常量。例如:const int max = 100; 这种常量有数据类型,编译器可以对其进行类型安全检查,而宏常量没有数据类型,编译器只能进行字符替换,没有类型安全...

    const和define用法

    由于 const 常量有更多的优点,例如数据类型、类型安全检查、调试等,因此在 C++ 程序中,我们应该只使用 const 常量而不使用宏常量。这样可以提供更多的安全性和可靠性,减少编译时的错误。 const 和 #define 都...

    C语言中const定义常量

    ### C语言中const定义常量 #### 一、引言 C语言作为一种广泛使用的编程语言,在软件开发领域占据着极其重要的地位。为了更好地理解和运用C语言中的特性,掌握`const`关键字的使用变得尤为重要。本文将详细介绍如何...

    c++里const用法归纳

    Const常量有数据类型,而宏常量没有数据类型,编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查。 例如,const int max = 100; 这里定义了一个const常量max,它的值是100,这个值在...

    c语言const用法小结

    const 变量可以通过不同的方式初始化,如非指针 const 常量初始化和指针 const 常量初始化等。需要注意的是,在初始化 const 变量时,需要遵守 const 的规则,不能对 const 变量进行更改操作。 5. const 在函数声明...

    const关键字详解

    extern关键字可以在另一个连接文件中引用const常量。例如,extern const int i; 声明了一个名为i的常量变量,并且可以在另一个文件中被引用。 4. 便于进行类型检查 const关键字可以使编译器对处理内容有更多了解。...

    关于const的详细讲解,非常有用

    - 避免数值混淆:与宏定义类似,修改const常量会影响所有使用该常量的地方,降低了维护成本。 - 保护数据:const可以防止意外修改,增加程序的健壮性,如尝试修改const变量会引发编译错误。 - 函数重载:const...

    简单掌握JavaScript中const声明常量与变量的用法

    JavaScript中的const关键字是一种用于声明常量的方式,它与let关键字类似,都是在ES6(ECMAScript 2015)版本中引入的新特性。const关键字提供了一种声明一个不可变的常量的能力,即一旦给const变量赋值之后,就不能...

    JAVA修改类文件编译不生效

    但是,问题来了:当我们修改了常量类中的某个常量值时,例如将 `STR_CONST_1` 修改为 `"NotString1"`,但是 `SomeService` 依然输出 `"String1"`,而不是我们期望的 `"NotString1"`。这是因为 Java 编译器在编译时...

    c++中const关键字使用详解

    使用new分配的指针可以初始化为const常量: ```cpp const int* c = new int(10); // c指向了一个const int ``` 或者引用const常量: ```cpp const int& ref = b; // ref是const引用,引用了一个const变量 ``` 三...

    C++:浅谈修饰符const

    然而,const常量实际上并不会被存储在程序的数据段中,而是存储在只读代码段(文本段),这意味着const常量的读取不需要运行时的内存访问,从而提升了访问速度。 9. const在实际编程中的应用:理解const的不同用途...

    C语言CONST的使用

    1. 定义const常量:通过const关键字可以定义一个常量,该常量在程序运行过程中值不可被更改。这对于提高代码的可读性和可维护性非常有帮助。 2. 类型检查:使用const定义的变量将被编译器检查,如果程序试图改变一...

    C++中const总结.ppt

    - **编译器处理方式**:宏定义发生在预处理阶段,而const常量在编译和运行阶段使用。 - **类型和安全检查**:宏定义不检查类型,仅做文本替换;const常量在编译阶段会进行类型检查,保证安全性。 - **存储方式**...

Global site tag (gtag.js) - Google Analytics