目录(作用):

  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. "格式化的文本"组件:<span> —— 快应用原生组件

     `<template> <div class="container"> <text><span class="success ...

  2. ffmpeg 交叉编译 版本4.0.4

    touch run.sh chmod 755 run.sh ./run.sh run.sh #!/bin/sh ./configure \ --arch=aarch64 \ --cpu=armv8-a ...

  3. 干货:python面对对象类继承简介

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python视觉算法 PS:如有需要Python学习资料的小伙伴可以加 ...

  4. 抠脚大叔如何改变性别,Python实现变声器功能

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 乔柯 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  5. Feature list, Standard and Test plan for BETA Release 12/22/2015

    ===================BETA RELEASE FEATRURE LIST==================== 1. Log in and account manager for ...

  6. ROM定制开发教程-Android adb命令用法与实例解析

    一.什么是ADB Android Debug Bridge(adb)是一个命令行工具,可让您与模拟器或连接的Android设备进行通信.您可以在android sdk / platform-tools ...

  7. 详解 Paths类 与 Files类

    在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...

  8. [PHP] 调用微博API 发微博OAuth2.0

    在实际测试中出现很多问题, 第一就是按照文档调用ACCESS_TOKEN的时候费老劲啦,因为是编辑线上的,有好多中文空格,没有看出来!整了好久! 第二个就是在调用api发微博的时候出现乱码!必须把发送 ...

  9. 云开发静态网站托管现已支持 Angular 应用

    云开发静态托管是云开发提供的静态网站托管的能力,静态资源(HTML.CSS.JavaScript.字体等)的分发由腾讯云对象存储 COS 和拥有多个边缘网点的腾讯云 CDN 提供支持. 在云开发静态托 ...

  10. JavaScript中一种全新的数据类型-symbol

    连续连载了几篇<ES6对xxx的扩展>,本节咱们换换口味,介绍一种全新的数据类型:Symbol,中文意思为:标志,记号.音标:[ˈsɪmbəl]. 数据类型 在介绍Symbol之前,我们简 ...