文档章节

const static在c c++中的作用

y_x
 y_x
发布于 2011/11/17 18:39
字数 733
阅读 501
收藏 2

一.C语言中的const

    const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。

1)用const修饰一般变量

       注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外);

       如:

       const int n;  这种声明方式是错误的

       const int n=5; 正确

       void fun(const int n); 正确

       const char a; 错误

       char * const p;  错误

       const char *p;正确(注意这种为什么是正确的),因为这里const是修饰p指向的变量,而不是指针变量p本身 

       一旦一个变量被const修饰后,在程序中除初始化外对这个变量进行的赋值都是错误的。

      如:

      const int n=5;

      n=3;    错误

   (2)const与指针搭配使用

      首先必须弄清楚两个基础概念:指针常量和常量指针

      指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的;

      常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的;

二.C++中的const

    C语言和C++中的const有很大区别。在C语言中用const修饰的变量仍然是一个变量;而在C++中用const修饰过后,就变成常量了。

   如:


    
const int n=5;int a[n];

这种方式在C语言中会报错,原因在于声明数组时数组的长度必须为一个constant,即常量,虽然n用const限定了,但n终究是一个变量,因此会报错;

但是在C++中不会报错,因为在C++中用const修饰过后,n就已经等同于一个常量了,因此可以通过。

 

static

C语言时代的static 
       在C语言中,只存在函数和变量。
             A、函数和全局变量,一旦加上static关键字,就限制了其作用域为本文件有效。
             B、局部变量,一旦加上static关键字,其生命其为整个应用程序。
C++语言时代的static
      在C++语言中,除了向C语言兼容外,提供了类的支持,同样static在C语言的特性在C++同样有效。
             C、类的static关键字,在C++的类中,static只能用于修饰数据成员和函数成员(不能修饰构造函数和析构函数),用于该类所具有的信息而不属具体某个对象.
             D、<注意>如果在类的成员函数中定义了static局部变量,其值会在所有对象中共享!这一点不好!

© 著作权归作者所有

y_x

y_x

粉丝 1
博文 7
码字总数 2582
作品 0
济南
高级程序员
私信 提问
__declspec(selectany)的作用

不懂就要问百度 转载自 http://blog.163.com/cumt_xl/blog/static/19071504420127114610861/ 最 近在用 template 编写singleton模式代码的时候,遇到了一个问题,template要求实现要在同一个...

sincoder
2012/12/24
464
0
const在c和c++中的区别

C中的const,功能比较单一,较容易理解: 作用: 被修饰的内容不可更改。 使用场合:修饰变量,函数参数,返回值等。(C++中应用场合要丰富的多) 特点: 是运行时const,因此不能取代#defi...

雅各宾
2013/07/11
83
2
C++ 惯用法: const 常量和字面量

原文:C++ 惯用法: const 常量和字面量 作者:Breaker C++ 中 const 关键字、常量和字面量的惯用法 关键字:const, enum, const_cast, const_iterator, mutable, 左值, 字面量 本质和非本质上...

晨曦之光
2012/05/23
543
0
C++中头文件、源文件之间的区别与联系

.h头文件和.cpp文件的区别 疑惑1:.h文件能够编写main函数吗? 实验: 编写test.h文件,里面包含main函数 若直接编译g++ test.h -o test,通过file命令 file test,得到如下结果test: GCC p...

风筝Fergus
2013/04/17
5K
2
C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

C++强制类型转换:staticcast、dynamiccast、constcast、reinterpretcast 1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换...

shzwork
03/12
3
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
12分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
19分钟前
2
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
26分钟前
2
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
28分钟前
3
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部