const传奇

简介

当我自己写程序需要用到const的时候,或者是读别人的代码碰到const的时 候,我常常会停下来想一会儿。许多程序员从来不用const,理由是即使没用const他们也这么 过来了。本文仅对const的用法稍作探讨,希望能够对提高软件的源代码质量有所帮助。

常变量

变量用const修饰,其值不得被改变。任何改变此变量的代码都会产生编译错 误。Const加在数据类型前后均可。

例如

void main(void)
{
  const int i = 10;  //i,j都用作常变量
  int const j = 20;
  i = 15;      //错误,常变量不能改变
  j = 25;      //错误,常变 量不能改变
}
常指针

 

Const跟指针一起使用的时候有两种方法。

const可用来限制指针不可变。也就是说指针指向的内存地址不可变,但可以随意改变该 地址指向的内存的内容。

void main(void)
{
   char* const str = "Hello, World";  //常指针,指向字符串
   *str = ''M'';      //可以改变字符串内容
   str = "Bye, World";    //错误,如能改变常指针指向的内存地址
}
const也可用来限制指针指向的内存不可变,但指针指向的内存地址可变。 void main(void)
{
   const char* str = "Hello, World";  //指针,指向字符串常量
   *str = ''M'';    //错误,不能改变字符串内容
   str = "Bye, World";  //修改指针使其指向另一个字符串
   *str = ''M'';    //错误,仍不能改变字符串内容
}

看完上面的两个例子,是不是糊涂了?告诉你一个诀窍,在第一个例子中,const用来修 饰指针str,str不可变(也就是指向字符的常指针);第二个例子中,const用来修饰char*, 字符串char*不可变(也就是指向字符串常量的指针)。

这两种方式可以组合起来使用,使指针和内存内容都不可变。

void main (void)
{
  const char* const str = "Hello, World";     //指向字符串常量的常指针
  *str = ''M'';      //错 误,不能改变字符串内容
  str = "Bye, World";    //错误,不能 改变指针指向的地址
}
Const和引用

 

时间: 2024-10-07 09:37:47

const传奇的相关文章

php中$this、static、final、const、self的用法

  本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法. $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式.常见用法如: $this->属性 $this->方法 举例如下:  代码如下   <?php class MyClass{  private $name;  public  function __cons

C++中const的运用

(1)欲阻止一个变量被改变,可以使用const关键字.在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了: (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const: (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值: (4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量: (5)对于类的成员函数,有时候必须指定其返回值为con

c++ virtual const T&amp;amp;amp; Entry(int index) const;

问题描述 c++ virtual const T& Entry(int index) const: 为什么有两个const,分别代表什么 c++ virtual const T& Entry(int index) const: 解决方案 第一个const说的是返回值,返回的是一个常量引用,不能修改; 后一个const是表示this指针指向的是const, 表明该函数不会改成员函数的值!该函数可以被常量对象访问(const). 解决方案二: 第一个const代表返回类型是const类型.为什

class-关于const虚函数问题,求解

问题描述 关于const虚函数问题,求解 class Base { public: virtual void print() const = 0; }; class Test : public Base { public: void print() {cout << "Test::print()" << endl;} void print() const { cout << "Test::print() const" <&l

iOS开发:正确使用const,static,extern

  前言 本篇主要介绍在开发中怎么使用const,static,extern3个关键字,如果喜欢我的文章,可以关注我微博:吖了个峥,也可以来小码哥,了解下我们的iOS培训课程.后续还会更新更多内容... 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误. 宏

理解PHP5中static和const关键字

php5|关键字 PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) staticstatic关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护.类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方

我要啦兄弟站长的传奇经历

站长 现在51la站长论坛和紫田网络在全国个人站长心中都很熟悉不过了.但是这才短短的三年,网络造就辉煌,成全所有努力和勤奋的人.    杨队,第一次看到他大队下载的域名,真感觉俗,俗不可耐,回到80年代农村时代了.那是04年,杨队的大队下载网站做的不错,宁愿说成seo技术不错,包括他的系列游戏类网站,无论在google还是在baidu,搜索很多下载和软件的都跑到他的网站.他的2个下载网站,也都有10来万的ip,在网站下面找到他的qq ,很快成了朋友,才逐渐认识这个有传奇色彩的站长.   这就是杨

C# FAQ: const和static readonly有什么区别?

ado|区别 我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值.而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值.明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:1. static readonly MyClass myins =

C#中 const 和 readonly 的区别

ado|区别 const 和 readonly 的区别,总是不太清楚,于是查了查资料.   const 的概念就是一个包含不能修改的值的变量.常数表达式是在编译时可被完全计算的表达式.因此不能从一个变量中提取的值来初始化常量.如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的.   readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值.因为 readonly 是在计算时执行的,当然它可以用某些变量初