目录(作用):

  1:修饰变量,说明该变量不可以被改变;
  2:修饰指针,分为指向常量的指针和自身是常量的指针
  3:修饰引用,指向常量的引用,用于修饰形参,即避免了拷贝,有避免了函数对值的修改; 
  4:修改成员函数:说明该成员函数内不能修改成员变量。(但是成员变量加上mutable就可以了
 
 
正文:
 
 以下是对各种情况的示例:
#注:1:const修饰的引用cj的值且引用的对象无法修改,但是引用的i是可修改的
#include <iostream> using namespace std; int main() {
int i = ;
const int &cj = i; cout << "cj : " <<cj<< endl;(√) i=;
cout << "cj : " <<cj<< endl;(√) cj=;
cout << "cj : " <<cj<< endl;(×)//引用之后,cj类似于常量,不能做赋值操作,同样的重新引用也不行;只可读的 int a=;
&cj=a; (×) return ;
} 错误提示:
/code/main.cpp: In function ‘int main()’:
/code/main.cpp::: error: assignment of read-only reference ‘cj’
cj=;
^
/code/main.cpp::: error: assignment of read-only reference ‘cj’
cj=a;
^
sandbox> exited with status
1 注:常量引用,本身也要是常量才行:

#include <iostream> using namespace std; int main() {
const int i = ; const int &ck = i; //正确,常量对象绑定到 const引用
cout<< "ck="<<ck<<endl; const int b = ; int &r = b; //错误, return ;
} /code/main.cpp: In function ‘int main()’:
/code/main.cpp::: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’
int &r = b; //错误,
^
sandbox> exited with status
 注:const 的隐式转换:

#include <iostream> using namespace std; int main() {
double b = 2.14;
const int &a = b;
// 会进行如下转换:
// int temp = b;
// const int &a=temp;
// 所以,给b进行赋值,a可能
cout<<"a="<<a<<endl;
return ;
} 运行结果:
a=
sandbox> exited with status
 注:修饰成员函数_1:

class Date
{
private:
int m_year;
int m_month;
int m_day;
public:
int GetDay(void) const
{
m_day=;
return m_day;//修饰的情况下,不能对成员变量进行修改;
}
}; int main() {
double b = 2.14;
const int &a = b;
// 会进行如下转换:
// int temp = b;
// const int &a=temp;
// 所以,给b进行赋值,a可能
cout<<"a="<<a<<endl;
return ;
} 错误提示:
/code/main.cpp: In member function ‘int Date::GetDay() const’:
/code/main.cpp::: error: assignment of member ‘Date::m_day’ in read-only object
m_day=;
^
sandbox> exited with status 0
 1 注:修饰函数_2

 #include <iostream>

     using namespace std;

 class Date
{
private:
int m_year;
int m_month;
mutable int m_day;//通过被mutable修改的成员变量,就可以被修改了
public:
int GetDay(void) const
{
m_day=;
return m_day;
}
}; // void GetDay(void) const
// {
// return m_day; // } int main() {
double b = 2.14;
const int &a = b;
// 会进行如下转换:
// int temp = b;
// const int &a=temp;
// 所以,给b进行赋值,a可能
cout<<"a="<<a<<endl;
return ;
} 运行结果:
a=
sandbox> exited with status
 注:const修饰的指针
#include <iostream> using namespace std; int main() {
const int* p = NULL;//这两种修饰的是*p指向的值
//int const* p = NULL; int a=;
p=&a;//修改了p指向的地址,任然没有出错
cout<<"*p="<<*p<<endl<<"p="<<p<<endl; int c=;
int* const b = &c;//这两种修饰的是p指向的地址
c=;
*b=c;//修改了b指向的值,任然不会出错
cout<<"*b="<<*b<<endl<<"b="<<b<<endl; b=&a;//这里有问题了,b指向的地址是不能修改的
cout<<"*b="<<*b<<endl<<"b="<<b<<endl;
return ;
} 运行结果:
/code/main.cpp: In function ‘int main()’:
/code/main.cpp::: error: assignment of read-only variable ‘b’
b=&a;
^
sandbox> exited with status
 注:const修饰的引用

#include <iostream> using namespace std; int main() {
int x = ;
const int& y = x;
cout<<"y="<<y<<endl;
x=;
cout<<"y="<<y<<endl; y=;//const修饰的引用是不能够在更改引用指向的对象的
cout<<"y="<<y<<endl;
return ;
} 运行结果:
/code/main.cpp: In function ‘int main()’:
/code/main.cpp::: error: assignment of read-only reference ‘y’
y=;
^
sandbox> exited with status
 

C++中const的特性的更多相关文章

  1. 实例讲述PHP面向对象的特性;;;php中const与define的使用区别

    php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...

  2. C++中const 的各种用法

    C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...

  3. (转) C/C++中const关键字详解

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

  4. 专家解读Linux操作系统内核中的GCC特性

    专家解读Linux操作系统内核中的GCC特性   Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...

  5. js中const,var,let区别(转载)

    js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...

  6. C++中const使用注意要点(一)

    最近看<C++编程思想>发现自己的基础确实不牢固,也想起了以前写代码时也因为const的事情浪费过时间,这里总结下几个要点. 首先说下内部链接和外部链接. 当一个cpp文件在编译时,预处理 ...

  7. C++中const限定符

    const基础 C++中的const,用于定义一个常量,这个常量的值不能被修改.因为const对象一旦创建就不能修改,所以const对象必须初始化.const常量特征仅仅在执行改变其本身的操作时才会发 ...

  8. 1 PHP 5.3中的新特性

    1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...

  9. CUDA中关于C++特性的限制

    CUDA中关于C++特性的限制 CUDA官方文档中对C++语言的支持和限制,懒得每次看英文文档,自己尝试翻译一下(没有放lambda表达式的相关内容,太过于复杂,我选择不用).官方文档https:// ...

随机推荐

  1. centos7安装MariaDB以及Failed to start mariadb.service: Unit not found的错误解决

    centos7下yum安装MariaDB CentOS 7下mysql下替换成MariaDB了.MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权 许可 Mari ...

  2. Docker 清理命令 删除所有的镜像和容器

    杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有未打 dangling ...

  3. DVWA渗透笔记

    Command Injection Low <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ ...

  4. 绕过CDN查找真实 IP 姿势总结

    返回域名解析对应多个 IP 地址,网站可能部署CDN业务,我们就需要bypass CDN,去查找真正的服务器ip地址 0x01.域名搜集 由于成本问题,可能某些厂商并不会将所有的子域名都部署 CDN, ...

  5. 千亿级平台技术架构:为了支撑高并发,我把身份证存到了JS里

    @ 目录 一.用户信息安全规范 1.1 ​用户信息.敏感信息定义及判断依据 1.1.1 个人信息 1.1.2 个人敏感信息 1.2 ​用户信息存储的注意事项 二.​框架技术实现 2.1 用户敏感信息自 ...

  6. G - Pairs Forming LCM LightOJ - 1236 (质因子分解)

    题解:这道题要从n的角度来考虑i和j. n可以表示为n=a1^p1*a2^p2*a3^p3.......n=lcm(i,j),那么质因子a1^p1,a1可以在i或者j中,并且p1=max(a1i,a1 ...

  7. C - Dr. Evil Underscores CodeForces - 1285D 二进制

    题目大意:n个数,任意整数x对这n个数取异或值,然后使最大值最小. 思路:数据范围最大为pow(2,30);所以考虑二进制的话,最多有30位.对于某一位d,然后考虑数组v中每一个元素的d为是0还是1, ...

  8. P1464 Function

    Function 简   单   的   递   归 这道题一开始十分智障地用递归做,虽然知道没那么简单,但还是冒着送死的心态交了一遍,果然,如我所料 样例输入: 密密麻麻,几万行的样例输入 //:) ...

  9. 【错误】python百分号冲突not enough arguments for format string

    query = "SELECT * FROM devices WHERE devices.`id` LIKE '%{}%'".format("f2333") d ...

  10. react: typescript import images alias

    1.webpack.config.js resolve: { extensions: ["ts", "tsx", "js", "j ...