<摘自C++Primer>
const
修饰变量,则该变量初始化的时候被赋值,在程序运行过程中不能被修改
非const变量默认为extern,要使const变量能够在其他的文件中访问,必须显式地指定它为extern.
const 引用是指向const对象的引用,并且只能引用该对象的值,而不能改变它的值
<摘自孙鑫VC++深入详解>
const char * 和char * const
很多和文件操作相关的函数其参数类型都是const char*(指向常量的指针)与指针常量(char * const)这两种类型。
const 在*前:表示指向常量的指针,该指针不能修改其指向的内存中的内容,但可以修改其所指向的内存地址
如 char ch[5]="lisi";
const char * pStr=ch
*pStr='w' //error
pStr="wangwu"//ok
char * const : const在*的后面表指针常量,对于指针常量必须在其定义的同事赋值。指针常量表示指针本身是常量。
char *const pStr=ch;
pStr="zhangsan"//error
*pStR='W'//OK
<摘自徐惠民C++>
常成员函数
语法格式:
返回值类型说明符 函数名(参数表)const
特点:const是函数类型的一个组成部分,在函数定义,声明,实现时也要带const关键字。
常成员函数不能更新对象的数据成员,也不能调用该类中的非常成员函数
常对象只能调用常成员函数,但是常成员函数也可以被普通对象调用
const 关键字可以被用于参与对重载函数的区分
《摘自C++Reference》
include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int end;
int myints[]={10,20,30,40};
int *p;
p=find(myints,myints+4,30);
p++;
cout<<"The element following 30 is"<<*p<<endl;
vector<int> myvector(myints,myints+4);
vector<int>::iterator it;
it=find(myvector.begin(),myvector.end(),30);
it++;
cout<<"The element following 30 is"<<*it<<endl;
cin>>end;
return 0;
}
此段代码表明iterator和指针的关系,数组与对应类别vector的关系
构造函数初始化式:只能在构造函数定义而非声明中指定,没有默认构造函数的类类型成员,以及const或引用类型的成员,不管是那种类型,都必须在构造函数初始化列表中进行初始化。成员在构造函数初始化列表中被初始化的次序是定义 成员的次序。
vector通过下标不能对其赋值,只能通过push_back(),但是map以及二维vector即包含vector的vector可以通过下标来赋值。
如下代码是合法的
vector<vector<int>> myintegers;
myintegers.resize(3);
for(int i=0;i<3;i++)
{
myintegers[i].resize(4);
}
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
myintegers[i][j]=numeric_limits<int>::min();
}
}
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
cout<< myintegers[i][j];
}
cout<<endl;
}