(下面以 typename 表示C/C++内某一类型

我常常会搞混 const 放在 typename* 的前面和后面的区别,今天特地查看了它们两个各自的含义,总结了一下:

  const typename* ptr 是指 ptr 是个指向常量的指针( pointer to constant data ),它认定所指向的内容是个常量,因此不能通过 *ptr 来改变它所指向的内容。比如说:

   1 const int apple = 0;

   2 const int* thirstyBoy = &apple;

   3 (*thirstyBoy)=1;

  编译器会在第三行报错。可以这样记忆:const typename* ptr, 因为 const 后面就是 typename ,所以是 ptr 所指向的类型为 typename 的量不能改变。

  

  typename * const ptr 就很容易理解了,因为 const 后面就是ptr,所以 ptr 是常量,不能改变ptr的值,因此叫做指针常量( constant pointer ), 如果试图改变 ptr 的内容:

  1  int apple = 0 , banana = 1;

   2  int * const thirstyBoy = &apple;

   3  thirstyBoy = &banana;

  编译器会在第三行报错。

注1:const typename* ptr 的 ptr 虽然认定它所指向的内容是个常量,但它也可以指向一个变量:

   1 int apple = 0;

   2 const int* thirstyBoy = &apple;

  这是合法的,然后也可以直接通过给 apple 赋值改变 apple 的值:

   3 apple = 1;

  但就是不能通过 *thirstyBoy 改变 apple 的值。

注2:上面所有的 const typename 都可以替换为 typename const 哦 :)

————感受到了一点C语言设计之精巧

如何牢记C/C++中const的用法?的更多相关文章

  1. C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏

    const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...

  2. C++中const指针用法汇总

    这里以int类型为例,进行说明,在C++中const是类型修饰符: int a; 定义一个普通的int类型变量a,可对此变量的值进行修改. const int a = 3;与 int const a ...

  3. C++中const关键字用法

    为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  4. C++中const的用法

    1.const修饰普通变量和指针 (1).const修饰普通变量 其写法有2种:a.const type value;   b.type const value; 这两种写法本质上是一样的.其含义是: ...

  5. ES6中const的用法

    const声明一个只读的常量.一旦声明,常量的值就不能改变.且const一旦声明变量,就必须立即初始化,不能留到以后赋值. const的作用域与let命令相同:只在声明所在的块级作用域内有效. con ...

  6. C++中const关键字用法总结

    看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧. 1) const与变量 在变量的定义前加上 const 修饰符即可完成const对象的创建. const int ...

  7. C++中const 的各种用法

    C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...

  8. C++中const简介及用法

    1.const简介 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰 ...

  9. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

随机推荐

  1. eclipse color theme 选择一款适合你的代码样式

    1 点击eclipse菜单栏上的Help ->Install New Softwave , 点击add按钮 随便写个名字 ,添加  地址   http://eclipse-color-theme ...

  2. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  3. modelsim无法识别include文件的解决方法

    modelsim发现include关联的文件编译报语法错误,文件名需要写绝对路径,即使这个文件和工程其它文件在一个目录上.例如只写成 `include "c0_ddr3_model_para ...

  4. swift 之 闭包

    一.闭包 格式:{  (  参数名:类型, 参数名:类型 ..  )   in 内容体  return  返回值   }  最完整的闭包 1.省略参数类型 {  (  参数名, 参数名..  )   ...

  5. Activity启动模式

    ------siwuxie095 共4种启动模式:standard singleTop singleTask singleInstance 1.标准启动模式(standard) 也即默认的启动模式 ( ...

  6. iOS8 定位补充

    iOS 8定位补充 iOS 8定位需要修改2个地方 1.info.plist文件中添加NSLocationAlwaysUsageDescription:描述信息 从iOS 8开始,用户定位分两种情况 ...

  7. 30分钟groovy快速入门并掌握(ubuntu 14.04+IntelliJ 13)

    本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员.了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合.内置正则表达式和闭包. ...

  8. 关于monkeyrunner的一些初步理解性的题目

    1.Monkeyrunner中包含几个基本类?分别大概的作用是什么? Monkeyrunner中基本包含了MonkeyRunner,MonkeyDevice,MonkeyImage MonkeyRun ...

  9. DBlink与同义词

    DBLink就是数据库链接,而同义词就已经具体到某个用户下的表了 原文链接:http://www.linuxidc.com/Linux/2013-01/77579.htm 这里所需要的信息: 从MM库 ...

  10. 一台独立的服务器是可以可以建立多个网站的,一个ip地址,一个端口

    # 1,若开启虚拟主机,这个一定要有(IP:端口),找到 #NameVirtualHost *:80 修改成: NameVirtualHost 127.0.0.1:80 # 2,修改<Direc ...