[ C++ ] 理解const

一直不理解C++中的const的写法的区别, 和应该如何记忆, 如

?





1

2

3

int* const
a;  //a作为指针本身为常量, 不允许改变指向, 定义时需要被赋值

int const* a;  //a指向内容为常量

const
int* a;  //a指向内容为常量

如此繁琐, 该如何记忆? 又该习惯于何种写法?

  <<C++ Templates>>第一章轻描淡写地提出: "恒定不变的部分"指的是const限定符前面的部分".

并推荐采用 int const *a 的写法, 而非 const int *a的写法.

  经过反复思考, 应这样理解:

指针解释:

?





1

2

int* const
a;  //const 修饰 int* , 即 a (指针)本身恒定

int const* a;  //const 修饰 int , 即 *a (指向的内容) 恒定

   而第三种写法 const前面没有任何东西, 虽然是正确的, 但不符合这种规则, 故不推荐使用.

引用解释:

  基于这样的规则, 考虑如下代码:

?





1

2

void
foo (int
const& a)

void
foo (const
int& a)

  对于以上代码都是正确的, 但第二种不合法规则, 故不推荐使用.

方法解释:

?





1

class
A{...};<br>int
A::top() const;    // const修饰 top() , 常量方法, 不允许该方法修改成员变量

其他推荐:

  书中同样指出: "对于间隔符, 我们决定在& 符合和参数名至今留出一个空格"

?





1

void
foo (int
const& x)

  借助这种方法, 我们同样强调: 参数类型和参数名称是分离的.

  故推荐如下写法:

?





1

int* a;

  而非

?





1

int *a;

[ C++ ] 理解const

时间: 2024-10-20 12:46:53

[ C++ ] 理解const的相关文章

深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成 const(char *)*p,因为在定义是"()"是表示函数. 三.深入理解7种组合 (0)程序 在执行时为其开辟的空间皆在内存(RAM)中,而RAM里的内存单元是可读可写 的:指针只是用来指定或定位要操作的数据的工具,只是用来读写RAM里内存单元的工作指针 .若对指针不加任何限定,程序中一个指针可以指向RAM中的任意位置(除了系统敏感区,如操作系统内核所在区域)并对其指向的内存单元进行读和写

【转】深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

一.可能的组合: (1)const char*p (2)char const*p (3)char *const p(4)const char **p (5)char const**p (6)char *const *p (7)char **const p 当然还有在(5).(6).(7)中再插入一个const的若干情况,不过分析了以上7中,其他的就可类推了! 二.理解助记法宝: 1.关键看const 修饰谁. 2.由于没有 const *的运算,若出现 const * 的形式,则const实际上

理解-const

c++ 中const和c中define的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具体的类型,在编译阶段会执行类型检查. (3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存. const常量会在内存中分配(可以是堆中也可以是栈中). 再续......

深入理解C++中的Const,Mutable以及Volatile

我一直认为const表示一个常量,常量就是一个无法被修改的值,但是没有深入理解const的实现,甚至不知道mutable和volatile的存在,最近在书中看到了这一部分的知识,所以本文将详细解析这几个关键词. 首先考虑以下几个问题: 1. const int a和int const a的区别. 2. const char* s和char *const s的区别. 3. 下列代码有问题吗?如果有问题应该如何修改? class A { private: int a; const int fun()

我所理解的readonly和const

最近要给学校软件小组新成员讲几次课,所以把很多以前懒得学习的和模糊不清的知识点,重新学习了一下. MSDN是这样解释的: readonly 关键字与 const 关键字不同. const 字段只能在该字段的声明中初始化. readonly 字段可以在声明或构造函数中初始化. 因此,根据所使用的构造函数,readonly 字段可能具有不同的值. 另外,const 字段为编译时常数,而 readonly 字段可用于运行时常数. 什么是编译时常数,什么是运行时常数呢.我想做下面的实验,关于readon

C++ const关键字总结

const是一个C++语言的限定符,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. 1. 修饰常量 用const修饰的变量是不可变的,以下两种定义形式在本质上是一样的: const int a = 10; int const a = 10; 2. 修饰指针 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量:如果const位于*的右侧,

共享数据的保护 const

摘要:C++中 虽然采用了很多措施(private)来增加数据的安全性,但是有些数据却是共享的,人们可以通过不同的途径访问同一数据对象,这种共享在不同程度上破坏了数据的安全性.为此引入常类型,既保证了数据共享,又防止数据被破坏! 常类型时指用const说明的类型,常类型的变量或者对象成员的值在程序运行的过程中使不允许修改的. 1.常引用:const 类型& 引用名   常用来做函数形参,即前面提到的只读不写! 2.常对象:const 类名 对象名(参数表);   被说明的对象为常对象,在对象的整

C语言const与define的使用

const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题. 问题:const变量 & 常量 为什么我象下面的例子一样用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? const int n = 5;int a[n]; 答案与分

C++常成员函数 - const 关键字

转自:http://www.cnblogs.com/this-543273659/archive/2011/07/18/2109922.html 一.常成员函数详解 声明:<类型标志符>函数名(参数表)const: 说明: (1)const是函数类型的一部分,在实现部分也要带该关键字. (2)const关键字可以用于对重载函数的区分. (3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数. A.通过例子来理解const是函数类型的一部分,在实