细说 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放在类型后面,这样容易理解