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:// ...
随机推荐
- 关于SQLAlchemy ORM框架
SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用 ...
- Mac配置hosts文件
说明:工作里面有时候会遇到内网办公的环境,需要对使用的IP和地址进行配置到hosts文件内,所以记录一下: 1,Windows配置hosts Windows里面直接打开文件夹,可进行找到system/ ...
- python 字节码死磕
前言: 如果你跟我一样,对python的字节码感兴趣,想了解python的代码在内存中到底是怎么去运行的,那么你可以继续往下看,如果你是python新手,我建议你移步它处,本文适合有点基础的pyth ...
- AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController
AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...
- stand up meeting 1/20/2016
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 修复bug 6 修复bug 6 foxit PDF ...
- 从零开始学AB测试:基础篇
什么是AB测试? 通俗点理解,AB测试就是比较两个东西好坏的一套方法,这种A和B的比较在我们的生活和人生中非常常见,所以不难理解.具体到AB测试这个概念,它和我们比较哪个梨更大.比较哪个美女更漂亮.比 ...
- 2020新Asp.NET敏捷快速开发框架7.0.5旗舰版源码asp.net mvc框架,工具类CRM,工作流
演示地址: http://frame3.diytassel.com 用户名:system 密码:0000 需要的联系QQ:22539134 一.新添加了 1.多语言功能: 2.代码生成器模版 ...
- 使用mysqlbinlog查看二进制日志
(一)mysqlbinlog工具介绍 binlog类型是二进制的,也就意味着我们没法直接打开看,MySQL提供了mysqlbinlog来查看二进制日志,该工具类似于Oracle的logminer.my ...
- SringMVC入门程序
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架 1.Spring优点 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼 ...
- pytorch 中word embedding 词向量的使用