`

C++ 中 const 和 static 的作用

    博客分类:
  • C++
c++ 
阅读更多

文章来源:http://www.itnose.net/detail/6031299.html
更多文章:http://www.itnose.net/type/55.html

const的主要应用如下:

  • const 用于定义常量:const定义的常量编译器可以对其进行数据静态类型的安全检查。

  • const 修饰函数形式参数:当输入参数为用户自定义类型和抽象数据类型的时候,将“值传递”改为“const 引用传递” 可以提高效率。

  • const 修饰函数的返回值:如果给“指针传递”的函数返回值加const,则返回值不能直接修改,且返回值只能被赋值给const 修饰的同类型指针。

   const char * GetChar(void) {};
   char *ch =GetChar();//error
   const char *ch=GetChar();//correct
  • const 修饰类的成员函数(函数定义体):任何不需要修改数据成员的函数应该使用const修饰,这样即使不小心修改了数据成员或调用了非const成员函数,编译器也会报错。

 int GetCount(void) const;

const 关键字使用的注意点:

  • const int 声明/定义一个类型的变量时,一定要初始化,并且该初始化的变量不能作为赋值操作符的左值。
  • const  int *  这时候 const用来修饰指针指向的变量,即指针指向是常量。即不能通过该指针给指向的变量赋值,能修改该指针的指向。
  • int * const 这时候const 用来修饰指向变量的指针,即指向变量的指针本身是常量。可以通过该指针修改指针指向的变量,不能修改该指针的指向。
  • const int * const    这时候前一个const 用来修饰的指针指向的是一个常量后一个const用来修饰指针本身是常量,不能通过指针修改变,也不能通过变量名(这时候应该叫做常量了)修改值。

例子:

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     const int x=1;
 6     int b=20;
 7     int c=10;
 8     int pto=100;
 9 
10     const int * p1=&b;
11     int * const p2=&c;
12     const int * const p3=&x;
13     const int * const p4=&b;
14     //*p1=21;   //error
15     p1=&pto;  
16     b=22;
17     
18     *p2=12;  
19     //p2=&b;    //error
20     c=11;
21 
22     //  *p3=3; 
23 
24     //  p3=&pto;
25     //  x=4;       //all error
26     return 0;
27 }

C++中static关键字有三个明显的作用:

  • 在函数体内,一个被声明为静态变量的局部变量在函数调用的过程中维持其值不变。

  • 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内的所有函数访问,但是不能被模块外的其他函数访问。它是一个本地的全局变量。

  • 在模块内,被声明为静态的函数只能被这一模块的其他函数调用。即函数被限制在被声明的模块范围内。

static 全局变量与普通全局变量有什么区别?

全局变量本身就是静态存储变量,静态全局变量当然也是静态存储变量。这两个在存储方式上并无不同。

但是 非静态全局变量的作用域是整个源程序,当源程序有多个源文件组成时,非静态全局变量在各个源文件中都是有效的。而静态全局变量的作用域只是在定义该变量的源文件中有效,其他源文件不能使用。

 

static局部变量与普通局部变量有什么区别?

把局部变量改变成static局部变量后是改变了它的存储方式,即改变它的生存期。

 

static函数与普通函数有什么区别?

作用域不同,static作用域只限于本文件,只在当前源文件中使用的函数应该说明为内部函数,内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

举例:

#include<iostream>

using namespace std;
class widget
{
    public:
        widget()
        {
            count++;
        }
        ~widget()
        {
            --count;
        }

        static int num()
        {
            return count;
        }
    private:
        static int count;
};

int widget::count =0;

int main()
{
    widget x,y;
    cout<<"The Num is "<<widget::num()<<endl;
    if(widget::num()>1)
    {
        widget x,y,z;
        cout<<"The Num is "<<widget::num()<<endl;

    }
    widget z;
    cout<<"The Num is "<<widget::num()<<endl;
    return 0;
}

输出:

The Num is 2
The Num is 5
The Num is 3

 

 
 
 

 

分享到:
评论

相关推荐

    C++编程const与static

    徐彤老师耗时三年倾心制作,专业录制,通俗想,细致的讲解了C++ 编程从入门到高级

    C++ 中 const和static readonly区别

    C++ 中 const 和 static readonly 区别 C++ 中 const 和 static readonly 是两种不同的关键字,它们都用于修饰变量或字段,但是它们之间存在着本质的区别。 首先,const 是一个编译时常量,它的值是在编译期间确定...

    类的static,const,static const,const static成员的初始化

    在 C++ 编程中,static、const、static const 和 const static 是四个常见的概念,但它们的初始化方式却容易弄混淆。下面我们将对这四种成员变量的初始化方式进行总结和解释。 1. 类里的 const 成员初始化 在一个...

    浅谈C++中的几个关键字static,const,inline.doc

    static、const 和 inline 是 C++ 中非常重要的关键字,它们在程序设计中扮演着非常重要的角色。 static 关键字的详细解释: static 关键字可以控制变量的存储方式和可见性。控制存储方式是指将变量存储在程序的...

    const与static用法完整总结

    `const`和`static`都是C++中非常重要的关键字,合理使用它们可以增加代码的安全性和效率。`const`用于标记不可变的数据或行为,而`static`则用于表示全局或静态作用域的数据或函数。正确理解并掌握它们的使用方法...

    c和c++中static,const的一些见解

    在C和C++编程语言中,`static`和`const`是两个非常重要的关键字,它们在不同的上下文中有各自的用途和含义。这篇文章将深入探讨这两个关键字,并分享一些专家的见解。 首先,`static`关键字在C和C++中的主要作用有...

    徐彤教程-C++编程const与static第0260讲:实例01-静态成员变量

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入 门到高级

    const extern static volatile 小结

    了解 `const`、`extern`、`static` 和 `volatile` 的基本概念后,在实际编程过程中可以根据需求灵活运用它们: - **安全性**:通过 `const` 确保某些数据不被意外修改,提高代码的稳定性。 - **内存管理**:利用 `...

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    本文将对C语言中的六个关键字:const、static、volatile、extern、auto、register进行详细的分析和解释。 一、const关键字 Const关键字是C语言中最基本的关键字之一,它的主要作用是将变量或对象声明为只读的,...

    C++中static关键字总结

    在C++中,使用static关键字可以修饰变量和函数,具有不同的作用。下面对这些知识点进行详细解释。 首先,静态变量(static variable)的主要存在意义在于它们能够在函数调用结束后仍然保持其值。普通变量在函数内部...

    const,extern,static,volatile的使用

    ### const、extern、static、volatile ...通过以上的介绍可以看出,`const`、`extern`、`static` 和 `volatile` 这四个关键字在 C 和 C++ 中有着广泛的应用。正确地使用这些关键字可以极大地提高代码的质量和可维护性。

    volatile关键字 Const关键字 static关键字 mutable 关键字

    总结起来,`volatile`, `const`, `static` 和 `mutable` 是C/C++编程中非常关键的概念,它们分别用于处理内存可见性、常量定义、作用域和对象的不变性。理解和正确使用这些关键字能帮助我们编写更安全、更高效、更具...

    徐彤教程-C++编程const与static第0261讲:实例02-静态成员函数

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入 门到高级

    C++类中的static和const用法实例教程

    static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法。供大家参考借鉴。具体说明如下: 首先以代码用来举例说明。示例代码如下: class A { public: A():m(10) //...

    徐彤教程-C++编程const与static第0263讲:实例03-const成员函数

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    徐彤教程-C++编程const与static第0262讲:实例03-const成员变量

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    C/C++中static,const,inline三种关键字详细总结

    一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...

    Cpp面经200问.pdf

    C++中const和static作用 const用于声明常量,保证变量不可修改。static用于声明静态存储期变量,使得变量在内存中只有一份拷贝。 #### 25. 顶层const和底层const 顶层const表示指针本身是一个常量,而底层const...

Global site tag (gtag.js) - Google Analytics