C++中const修饰基本数据类型、指针、引用、对象
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的指向
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的值也会跟着改变。
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修饰基本数据类型、指针、引用、对象的更多相关文章
- C/C++ 中 const 修饰符用法总结
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...
- [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...
- 转载----C/C++ 中 const 修饰符用法总结
感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...
- const修饰的双重指针赋值解惑
在c程序中,我们可能经常会使用到指针之间的赋值. 传统的赋值操作: char *cp = "c"; const char *ccp; ccp = cp; printf(" ...
- C++中使用const修饰指针
在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...
- const修饰指针的三种效果
当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...
- const修饰的常量 不能被直接修改 但是可以通过指针进行间接修改
大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过 ...
- C++ --const修饰指针
const修饰指针 1.const修饰指针 (常量指针)常量的指针 const int *p = &a; const修饰的是*p(表示内容为常量),不是p(指针) 指针指向的地址可以改,但指针 ...
- C++中const 的各种用法
C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...
随机推荐
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- Remove “System Program Problem Detected” Messages From Ubuntu
One of my Ubuntu systems would pop up the following message multiple times after logging in: System ...
- 如何关闭UINavigationController 向右滑动 返回上一层视图
说明一下: 我的nav 设置的rootview 是 tabbarcontroller,登录界面是push进去的,所以,在登录界面,如果靠近最左边 向右滑动 会出现 tabbarcontroller的视 ...
- Design Pattern Explained 读书笔记二——设计模式序言
设计模式的由来: 20 世纪 90 年代初,一些聪明的开发者偶然接触到 Alexander(Christopher Alexander 的建筑师) 有关模式的工作.他们非常想知道,在建筑学成立的理论, ...
- Zmodem transfer canceled by remote side
linux sz命令时报这个错误,看了一头雾水. 仔细看了一下发现竟然是要sz的文件名称写错了,抱着个错误和误导人呢.估计路径写错了也是这个错误.
- UvaLive 6667 Longest Chain (分治求三元组LIS&树状数组)
题目链接: here 题意: 和hdu4742类似.差别就是一部分三元组是直接给出的.另一部分是用他给的那个函数生成的.还有就是这里的大于是严格的大于a>b必须ax>bx,ay>by ...
- Matplotlib 工具包 使用教程索引
官方文档链接中: http://matplotlib.org/gallery.html 这里给了非常多演示样例图片.能够查看对应源码,是一个非常好学习途径. matplotlib 函数API :函数A ...
- visual studio 2013 有效序列号
还没试过,可以参考下! visual studio 2013 有效序列号: BWG7X-J98B3-W34RT-33B3R-JVYW9
- iOS 并发概念浅析
在进行iOS开发过程中,我们常会遇到网络请求.复杂计算.数据存取等比较耗时的操作,如果处理不合理,将对APP的流畅度产生较大影响.除了优化APP架构,并发(concurrency)是一个常用且较好的解 ...
- mysql与java的之间的连接
package cn.hncu; //注意,以下都是sun公司的接口(类)---这样以后换成Oracle等其它数据库,代码不用动import java.sql.Connection;import ja ...