细说 const

1、const 简单应用

  const int pp=0 //pp 为整形常量,不能修改

  还有另外一种不常用的方式 但是最容易误导

  int const pp=0 //pp 为整形常量,不能修改

  记住这两个等价声明,后面还有用处

  

  const int* ptr=&pp   //ptr 为指向int型常量的指针,ptr可以使用常量或非常量初始化

  int* const ptr ==&pp //ptr 为常量指针,初始化后,不能指向其他地址,仅能指向非常量

  const int & infer=pp  //infer为指向常量的应用,不能通过infer更改pp的值

  const int* const ptr1=&pp //ptr1为指向const对象的const指针

2、个人误解

  typedef string* pstring

  const pstring cstr

  问 cstr是什么类型?

  答 cstr是const指针,指向string类型变量,其声明等价为   pstring const cstr ,即为string* const cstr

  最近真正遇到的问题是,模板类的特化问题:

 1 template<class T>
 2 const T& min(const T& a,const T&b){
 3     retrun (a<b) ?a:b ;
 4 }
 5
 6
 7 //模板特化
 8 template<>
 9 const char* const& min<const char*>(const char* const&a,const char*const b){
10
11     return (strcmp(a,b)<0) ?a :b;
12 }

  最开始认为模板特化,就是讲T换成一个特别的类型,如此例:T换成const char*,简单的文本扩展,一般情况都是对的。

  那么最后应该为 min(const const char*& a,const const char*& b),这个想想是不对的。

  我觉得应该这么理解

  typedef const char*  T

  这样T作为简单类型名,这样min函数实际定义可以写为min(T const&a,T const&b) ,这样就容易理解了

  C++primer 也建议将const放在类型后面,这样容易理解

  

  

时间: 2024-12-19 13:04:49

细说 const的相关文章

玩转 React 服务器端渲染

React 提供了两个方法 renderToString 和 renderToStaticMarkup 用来将组件(Virtual DOM)输出成 HTML 字符串,这是 React 服务器端渲染的基础,它移除了服务器端对于浏览器环境的依赖,所以让服务器端渲染变成了一件有吸引力的事情. 服务器端渲染除了要解决对浏览器环境的依赖,还要解决两个问题: 前后端可以共享代码 前后端路由可以统一处理 React 生态提供了很多选择方案,这里我们选用 Redux 和 react-router 来做说明. R

细说C++之const

1.C语言中const与 C++中的const void main() { const int a = 10; int *p = (int*)&a; *p = 20; printf("%d", a); } 比较上述代码在C中和C++中运行结果:C:打印20:C++:打印0: 由此可见,C语言中的const是个"冒牌货",C++中 的const是一个真正的常量. 原因:C语言直接为a分配了内存.C语言中的const变量是只读变量,有自己的存储空间.而C++编译

细说linux IPC(五):system V共享内存

system V共享内存和posix共享内存类似,system V共享内存是调用shmget函数和shamat函数.           shmget函数创建共享内存区,或者访问一个存在的内存区,类似系统调用共享内存的open和posix共享内存shm_open函数.shmget函数原型为: #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); key: 函

细说linux IPC(三):mmap系统调用共享内存

前面讲到socket的进程间通信方式,这种方式在进程间传递数据时首先需要从进程1地址空间中把数据拷贝到内核,内核再将数据拷贝到进程2的地址空间 中,也就是数据传递需要经过内核传递.这样在处理较多数据时效率不是很高,而让多个进程共享一片内存区则解决了之前socket进程通信的问题.共享内存 是最快的进程间通信 ,将一片内存映射到多个进程地址空间中,那么进程间的数据传递将不在涉及内核.        共享内存并不是从某一进程拥有的内存中划分出来的:进程的内存总是私有的.共享内存是从系统的空闲内存池中

细说linux IPC(六):pipe和FIFO

在unix系统上最早的IPC形式为管道,管道的创建使用pipe函数: #include <unistd.h> int pipe(int pipefd[2]); 该函数创建一个单向的管道,返回两个描述符 pipefd[0],和pipefd[1],pipefd[0]用于读操作,pipefd[1]用于写操作.该函数一般应用在父子进程(有亲缘关系的进 程)之间的通信,先是一个进程创建管道,再fork出一个子进程,然后父子进程可以通过管道来实现通信.管道具有以下特点:管道是半双工的,数据只能向一个方向流

细说Linux中的信号(signal )

在细说信号之前我们先来了解下什么是信号.信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据. 信号的种类有很多,我们可以通过kill -l命令察看系统定义的信号列表: 可以看到一共有62个信号.1-31号为普通信号:34-64号为实时信号.(博主这次只讨论普通信号.) 接下来我们来细说信号的产生.阻塞和捕捉. >>信号的产生: 通

细说智能指针

提到指针,我们就会想到指针的高效,当然,滥用指针也会为我们带来许多的潜在bug.提到指针,我们就会想到内存泄漏.比如,使用指针后忘记释放,久而久之,堆空间就会全部使用完,那么会带来很大的危害.再比如,两个指针指向同一片内存区域,我们对同一片区域进行了多次释放,同样会造成内存泄漏.为了方便大家的理解,我们先来模拟一下,使用指针却忘记释放带来的危害.首先,我们要定义一个类.这次,还是定义女朋友类吧(之前写过一篇<细说C++的友元>用的就是女朋友类,这次还用这个吧,方便说明问题,更何况我们这群马畜怎

const指南

基本词义  意思就就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! 使用方法 const int a=1;//这里定义了一个int类型的const常数变量a; 但对于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆! 我们来看一个如下的例子: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream> using na

PHP 面向对象中常见关键字使用(final、static、const和instanceof)

PHP 面向对象中常见关键字的使用: 00x1.Final :final关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性. 作用: 使用final标识的类,不能被继承. 在类中使用final标识的成员方法,在子类中不能覆盖. 总结:final表示为最终的意思,所以使用final关键字的类或者类中的成员方法是不能被更改的. 00x2.Static :static关键字将类中的成员属性或者成员方法标识为静态的,static标识的成员属性属于整个类,static成员总是唯一存在的,