C++中const的特性
目录(作用):
#注: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的特性的更多相关文章
- 实例讲述PHP面向对象的特性;;;php中const与define的使用区别
php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...
- C++中const 的各种用法
C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...
- (转) C/C++中const关键字详解
文章转自 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...
- 专家解读Linux操作系统内核中的GCC特性
专家解读Linux操作系统内核中的GCC特性 Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- C++中const使用注意要点(一)
最近看<C++编程思想>发现自己的基础确实不牢固,也想起了以前写代码时也因为const的事情浪费过时间,这里总结下几个要点. 首先说下内部链接和外部链接. 当一个cpp文件在编译时,预处理 ...
- C++中const限定符
const基础 C++中的const,用于定义一个常量,这个常量的值不能被修改.因为const对象一旦创建就不能修改,所以const对象必须初始化.const常量特征仅仅在执行改变其本身的操作时才会发 ...
- 1 PHP 5.3中的新特性
1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
- CUDA中关于C++特性的限制
CUDA中关于C++特性的限制 CUDA官方文档中对C++语言的支持和限制,懒得每次看英文文档,自己尝试翻译一下(没有放lambda表达式的相关内容,太过于复杂,我选择不用).官方文档https:// ...
随机推荐
- 超详细Go语言源码目录说明
开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢?今天 ...
- 反射----获取class对象的五种方法
反射Reflection 配合注解使用会格外强大,反射注解,天生一对 类如何加载? 动态语言和静态语言.我知道是什么,不用总结了. 由于反射,Java可以称为准动态语言. 允许通过反射获得类的全部信息 ...
- AJ学IOS(23)UI之控制器管理
AJ分享,必须精品 控制器以及view的多种创建方式 控制器view的加载 通过storyboard创建 1:先加载storyboard⽂件(Test是storyboard的⽂文件名) UIStory ...
- python干货:5种反扒机制的解决方法
前言 反爬虫是网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,一般情况下除了百度等网站,反扒机制会常常更新以外.为了保持网站运行的高效,网站采取的反扒机制并不是太多,今天分享几 ...
- Python 控制流代码混淆简介,加大别人分析你代码逻辑和流程难度
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- CodeForces - 876B H - 差异的可分割性
现在有n个整数,在这n个数中找出k个数,保证这k个数中任意两个数差的绝对值可以被m整除. Input第一行输入三个整数n,k,m(2<=k<=n<=100000,1<=m< ...
- Spring Data REST不完全指南(三)
上一篇我们介绍了使用Spring Data REST时的一些高级特性,以及使用代码演示了如何使用这些高级的特性.本文将继续讲解前面我们列出来的七个高级特性中的后四个.至此,这些特性能满足我们大部分的接 ...
- [护网杯2018] easy_laravel
前言 题目环境 buuoj 上的复现,和原版的题目不是完全一样.原题使用的是 nginx + mysql 而 buuoj 上的是 apache + sqlite composer 这是在 PHP5.3 ...
- tp3.2 事务 和 tp5.0事务
tp3.2: 来源:https://www.kancloud.cn/thinkphp-development/tp323/423369 和: https://blog.csdn.net/mengzuc ...
- Auth认证中的think_auth_rule type字段干嘛用的?
昨晚认真研究了一下这个类,设计的很巧妙,但是你说的这个字段,我认为应该是作者想加功能但还没写,在session判断的地方可以看到,type这个字段实际是对应的 1-实时验证,2登陆验证 ,显然,这个字 ...