目录

const 的主要应用如下:

const 关键字使用的注意点:

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

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用来修饰指针本身是常量,不能通过指针修改变,也不能通过变量名(这时候应该叫做常量了)修改值。

例子:

 #include<stdio.h>

 int main()
{
const int x=;
int b=;
int c=;
int pto=; const int * p1=&b;
int * const p2=&c;
const int * const p3=&x;
const int * const p4=&b;
//*p1=21; //error
p1=&pto;
b=; *p2=;
//p2=&b; //error
c=; // *p3=3; // p3=&pto;
// x=4; //all error
return ;
}

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 =; int main()
{
widget x,y;
cout<<"The Num is "<<widget::num()<<endl;
if(widget::num()>)
{
widget x,y,z;
cout<<"The Num is "<<widget::num()<<endl; }
widget z;
cout<<"The Num is "<<widget::num()<<endl;
return ;
}

输出:

The Num is
The Num is
The Num is

C++ 中 const 和 static 的作用的更多相关文章

  1. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  2. php中const与static的区别与使用(转)

    首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下:   class Test{   const PATH = 'c/';//修饰常量   const function te ...

  3. php中const和static的区别和联系

    1.const是类中的常量,类外用define来定义常量2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法3.const和static都属于类本身,而不属于n ...

  4. OC中的extern,static,const

    const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 被const修饰的变量是只读的. static的作用: 修饰局部变量: 1.延长局部变量的生命周期,程序结束才会 ...

  5. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  6. iOS 中 const static extern 关键字总结

    在看一些高手所写的代码时,总是可以看到我们小白平常不用的关键字,一次,两次,三次,不能总是不明不白,现在总结一下日常开发中常用的关键字的作用: 关键字const/static/extern的释义和用法 ...

  7. Objective-C中的const ,extern,static

    一.const 1>对于const,记住关键的一点,它只是修饰右边的变量. 例如: - (void)viewDidLoad { [super viewDidLoad]; // const两种用法 ...

  8. C/C++中static关键字作用总结

    来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...

  9. php中$this、static、final、const、self 等几个关键字的用法

    <?phpclass A { public static function get_self(){ return new self(); } public static function get ...

随机推荐

  1. delphi 动态建立WebBrower

    //Delphi动态建立WebBrowerunit Main;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphi ...

  2. MySQL 子查询 EXISTS 和 NOT EXISTS(转)

    MySQL EXISTS 和 NOT EXISTS 子查询 MySQL EXISTS 和 NOT EXISTS 子查询语法如下: SELECT ... FROM table WHERE EXISTS ...

  3. 配置Windows Live Writer,写cnblogs博客

    引言        以前写博客一般都是联网在cnblogs上面写,不好的地方就是不联网就写不了,当然我们也可以先记录在word文件,等联网在从word里面拷贝出来发布到cnblogs上面,但是样式这些 ...

  4. Python学习 之 走进python

    1.Python:是一种解释型的.面向对象的.带有动态语义的高级程序设计语言. 2.Python发展阶段 —CNRI时期 —BeOpen时期 —DC时期 —Python 3.0 Python里程碑:2 ...

  5. 决策树算法实现(train+test,matlab) 转

    原文:http://www.zgxue.com/198/1985544.html 华电北风吹 天津大学认知计算与应用重点实验室 修改日期:2015/8/15 决策树是一种特别简单的机器学习分类算法.决 ...

  6. eclipse 如何使用svn

    1.安装:安装包或输入网址 2.点打开透视图,点svn右键,新建网络地址 3.更新svn,检出svn即可

  7. 为MYPoint类写一个分类

    #import <Foundation/Foundation.h> //xieyi @protocol showOn @required -(void)printOn; @end // l ...

  8. Yii2高级版本复制新项目出现问题解决(转)

    引用于 http://www.linuxidc.com/Linux/2015-02/114116.htm Yii2高级版本复制新项目会遇到下面的报错信息: exception 'yii\base\In ...

  9. LeetCode 268

    Missing Number Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one ...

  10. [改善Java代码]提防包装类型的null值

    建议26: 提防包装类型的null值 我们知道Java引入包装类型(Wrapper Types)是为了解决基本类型的实例化问题,以便让一个基本类型也能参与到面向对象的编程世界中.而在Java 5中泛型 ...