文章来源: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++ 编程从入门到高级
主要介绍了C++ 中 const和static readonly区别的相关资料,需要的朋友可以参考下
static,const,static const,const static是c++中几个常见的很容易弄混淆的几个概念,在这里总结了一下,与大家分享!
浅谈C++中的几个关键字static,const,inline.doc 浅谈C++中的几个关键字static,const,inline.doc
徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入 门到高级
C/C++ 嵌入式 一些关键字: volatile关键字 Const关键字 static关键字 mutable 关键字
徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入 门到高级
C语言中关键字const、static、volatile、extern、auto、register的用法分析
static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法。供大家参考借鉴。具体说明如下: 首先以代码用来举例说明。示例代码如下: class A { public: A():m(10) //...
徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级
徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级
一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...
以前都不太清楚,搜集了大虾们的见解,终于明白了。也拿给大家看一下。
const,extern,static,volatile的使用
在头文件的类的定义中定义了一个const成员变量c++ 规则: 1、类定义中不能进行初始化,因为头文件中类的定义只是一个声明,并没有分配真正空间,因此变量是不存在的,因此是不能赋值的。 2、const 定义的变量是不能...
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下