码迷,mamicode.com
首页 > 编程语言 > 详细

如何牢记C/C++中const的用法?

时间:2016-07-22 18:46:13      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

(下面以 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的用法?

标签:

原文地址:http://www.cnblogs.com/Luxuer/p/5695968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!