IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> const在C++中的应用 -> 正文阅读

[C++知识库]const在C++中的应用

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;//失败,不可以进行赋值,改变了b的返回值
    //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值
   {
      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);
    //c.example();//错误,不能调用
    cout<<c.getnum()<<endl;
    Ccreate b(2);
    b.example();//无限制,可以调用
   }
   system("pause");
   return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:17:37  更:2022-04-22 18:19:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:02:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码