const在c++中使用比较广泛,主要起着限定的作用,即在程序运行过程中限定的内容不会去改变别的变量或者自身改变,接下来具体介绍const的用法 #1 const在常量的应用 这里主要是int const+常量与const int+常量可以替换使用 下面在程序中试图修改常量的值
int main(void)
{
int const a[7];
const int m=7;
m=8;
system("pause");
return 0;
}
#2.const对指针的限制 这里主要有两个概念,指针常量和常量指针,区别在于const在指针限定符* 的左侧或是右侧 ##(1)指针常量 const在* 的左侧定义为const int* a或者int const* a,因为int const和const int表达效果一致 在使用中的限制如下
int main(void)
{
int y=5;
int const *a=&y;
int s=9;
a=&s;
*a=9;
cout<<*a<<endl;
system("pause");
return 0;
}
##(2)常量指针 此与上述恰恰相反,const位于* 的右侧,记作int* const a 可以对指针的内容进行直接修改,但是不能改变指向,具体应用如下
int main(void)
{
int y=5;
int* const a=&y;
int s=9;
a=&s;
*a=9;
cout<<*a<<endl;
system("pause");
return 0;
}
##(3)双重限制 限定指向和内容均不能修改 记作const int* const a
const int* const a=&y;
int s=9;
a=&s;
*a=9;
#3.const在函数中的应用 ##(1)作为形参 当const作为形参时例如下列格式 int y(const int& a) 此时主要是限制对传入参数进行改动,防止函数运行时改变了引用的数据 例子如下
int y(const int& a)
{
int s;
s=a;
a=8;
}
##(2)限定函数的返回值 值传递方式 函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。 指针传递 函数返回值(即指针)的内容不能被修改,例如const char* count(char* str); 则调用的时候应当使用const char *str = count(str1); 引用传递 引用传递一般应用在类的重载函数中,例如对“=”进行重载,使用中加入const可以防止链式赋值
Ccreate(int m):m(m){}
const Ccreate& operator=(const Ccreate &y)
{
this->m=y.m;
}
int getnum()
{
return m;
}
private:
int m;
};
int main(int argc, char* argv[])
{
{
Ccreate a(5);
Ccreate b(2);
Ccreate c(1);
(c=b)=a;
cout<<c.getnum()<<endl;
}
system("pause");
return 0;
}
#4在类中的应用 ##(1)const成员函数不可以修改对象的数据,这种应用为了确保类中成员的安全性,使用方法在成员函数尾部写上const 示例如下
class Ccreate
{
public:
Ccreate(int m):m(m){}
const Ccreate& operator=(const Ccreate &y)
{
this->m=y.m;
}
int getnum()const
{
m++;
return m;
}
private:
int m;
};
int main(int argc, char* argv[])
{
{
Ccreate c(1);
cout<<c.getnum()<<endl;
}
system("pause");
return 0;
}
##(2)const对于对象的限制,const对象只能访问const成员函数
class Ccreate
{
public:
Ccreate(int m):m(m){}
const Ccreate& operator=(const Ccreate &y)
{
this->m=y.m;
}
void example()
{
cout<<"2332"<<endl;
}
int getnum()const
{
return m;
}
private:
int m;
};
int main(int argc, char* argv[])
{
{
const Ccreate c(1);
cout<<c.getnum()<<endl;
Ccreate b(2);
b.example();
}
system("pause");
return 0;
}
|