const修饰基本数据类型

#include <iostream>
using namespace std; void main(){
const int a = 1;
const char b = 'k';
const float c = 3.14f;
//a = 2;
//b = 'n';
//c = 1.2f;
}

const修饰基本类型表示这些类型为常量,不能再修改或赋值。还有需要注意的是3.14默认为double类型,如果用float变量保存的话应该写成float c = 3.14f。


const修饰指针

#include <iostream>
using namespace std; void main(){
int a = 0;
int b = 0;
int c = 0;
int d = 0;
const int *p1 =&a; //指向整形常量的可变指针
int const * p2 =&b; //指向整形常量的可变指针
int * const p3 =&c; //指向可变整形的常指针
const int * const p4 =&d; //指向整形常量的常指针
}

p1所指向的内容为整型常量,所以*p1=2;是错误的。但可以进行p1++这样的操作,也可改变p1的指向

p2跟p1一样只是表现形式不同,同样的*p2=2;是错误的。但可以进行p2++这样的操作,也可改变p2的指向
p3是常指针,p3本身不能变化,不能改变p3的指向,但它所指向的内容可变,*p3=2;是对的
p4是常指针,而且指向的内容是常量,*p4=2;是错的。

判断方法:const在*前说明是指向常量的指针,const在*之后说明指针为常指针。*前后都有const说明指针为指向常量的常指针。

const修饰引用

很多同学跟我一样爱钻牛角尖将const修饰引用与const修饰指针进行对比,是不是const修饰引用也有修饰指针时的四种情况呢?

#include <iostream>
using namespace std; void main(){
int a1 = 1;
int a2 = 1;
int a3 = 1;
int a4 = 1;
const int & b1 = a1;
int const & b2 = a2;
int & const b3 = a3; //提示“qualifiers on reference are ignored”
const int & const b4 = a4; //提示“qualifiers on reference are ignored”
}

const int & b1 = a1; 则b1是常量b1++、b1=2都是不可以的,虽然b1是a1的一个别名,但是不能通过b1来修改a1。但是a1不是常量,可以a1=2,b1的值也会跟着改变。

int const & b2 = a2;与第一个是相同的,b2是引用常量,不能通过b2修改a2,但是a2不是常量,可以修改,b2随之改变。
int & const b3 = a3;提示了“qualifiers on reference are ignored”,即对引用的限定符被忽略,所以相当于int & b3 = a3; const没有起作用。
const int & const b4 = a4; 同理实质上与第一种是一样的,相当于const int & b4 = a4;
总结:首先要知道定义引用时就要进行初始化,而且引用不能改变指向。
然后const在&之前表明引用为常引用,不能通过该引用修改值。const在&之后,const不起效果。

const修饰对象

#include <iostream>
using namespace std; class A {
private:
int i;
public:
A(){ i = 0; }
void set(int n){
i = n;
}
void get() const {
cout<<"成员变量的值:"<<i<<endl;
}
};
void main(){
const A a;
//a.set(1);
//a.get();
}

定义一个const对象,const对象企图调用set函数改变成员变量的值,这是不允许的。const对象顾名思义为常对象,所有对象的成员变量不可变。而且const对象也不能调用非const函数,哪怕set函数没有修改成员变量,编译也会出错。而get函数为const函数,所以const对象可以调用get函数。

 

C++中const修饰基本数据类型、指针、引用、对象的更多相关文章

  1. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

  2. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

  3. 转载----C/C++ 中 const 修饰符用法总结

    感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...

  4. const修饰的双重指针赋值解惑

    在c程序中,我们可能经常会使用到指针之间的赋值. 传统的赋值操作: char *cp = "c"; const char *ccp; ccp = cp; printf(" ...

  5. C++中使用const修饰指针

    在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...

  6. const修饰指针的三种效果

    当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...

  7. const修饰的常量 不能被直接修改 但是可以通过指针进行间接修改

    大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过 ...

  8. C++ --const修饰指针

    const修饰指针 1.const修饰指针 (常量指针)常量的指针 const int *p = &a; const修饰的是*p(表示内容为常量),不是p(指针) 指针指向的地址可以改,但指针 ...

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

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

随机推荐

  1. 有关AES加密的问题

    遇到一个项目,需要用AES加密密码,android的已经写好了,java源码: private static final String AES_OPTIONS = "AES/ECB/PKCS ...

  2. 授予普通域用户远程桌面连接DC/客户端权限

    普通域用户通过远程桌面登录DC: 1)将该用户加入到 Remote Desktop Users 组中

  3. rk3288的SDK修复cm3218光敏驱动bug

    瑞芯的Android 4.4的SDK中kernel的补丁例如以下: diff --git a/arch/arm/boot/dts/rk3288-tb_8846.dts b/arch/arm/boot/ ...

  4. android 删除文件以及递归删除文件夹

    private void deleteDirectory(File file) { if (file.isFile()) { file.delete(); return; } if(file.isDi ...

  5. Distributed systems

    http://book.mixu.net/distsys/single-page.html

  6. error “base class has incomplete type”

    error "base class has incomplete type" 如果base.h是你的基类,那么在子类derive中,写成如下形式: class base; clas ...

  7. 在eclipse中运行storm-starter

    开源软件官网提供的demo无疑是学习开源软件的最好的最原始的样例. 在Storm官网里下载apache-storm-0.9.6.zip,里面\examples\storm-starter\src\jv ...

  8. MATLAB的循环结构

    循环结构有两种基本形式:while 循环和for 循环.两者之间的最大不同在于代码的重复是如何控制的.在while 循环中,代码的重复的次数是不能确定的,只要满足用户定义的条件,重复就进行下去.相对地 ...

  9. Atom编辑器入门到精通(六) Markdown支持

    尽管我们使用Atom主要是为了编写代码,不过Atom还支持编辑很多其他格式的文件. 比如Markdown和Asciidoc. 这一章中我们主要学习如何快速方便地编辑Markdown文件.另外在写这篇博 ...

  10. 读jQuery官方文档:遍历

    遍历 jQuery的快捷遍历方法可以快速定位到想要的元素.查找祖先元素 html<div class="grandparent"> <div class=&quo ...