【转】C++中的引用类型和枚举类型
来源:互联网 发布:分布式算法导论 pdf 编辑:程序博客网 时间:2024/06/06 00:41
引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。
- 引用对象采用类型名加上&符号和名称的方式进行定义。例如:
(int &test;)
,这里我们就定义了一个int类型的名为test 的引用 - 但是
int &test;
这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test=变量名;
)。
我们来看下面一段代码
#include <iostream> using namespace std; int main() { int a=10; int &test=a; test=test+2; cout << &a <<","<< &test <<";"<< a <<","<< test << endl;} ----------- Output --------------------0xa9fe44,0xa9fe44;12,12
我们会发现&a和&test的地址显示是相同的,a和test的值显示也是一样的,也就是说,test是a的别名。
当引用类型遇上const的时候会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的:
#include <iostream> using namespace std; int main() { int a=10; //double &test = a + 1.2f; //这句就是错误的! const double &test = a + 1.2f; //可以将float类型的值初始化到double cout << &a <<","<< &test <<";"<< a <<","<< test << endl;} ----------- Output --------------------0xa9fe2c,0xa9fe30;10,11.2
这里要注意test和a的地址和值都不一样,test其实是等于a+1.2f的,也就是说test和a是完全的两个变量。
如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或对象可能存在的情况(可能的值)一一例举出来。
定义枚举变量由两种方式:
//第一种enum box{pencil,pen};enum box box2; //或者简写成box box2;box当作一个type//第二种enum {pencil,pen}box,box2; //在声明的同时进行定义!
- 枚举类型成员是常量
枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作!
也就是说enum MyEnum{ one = 1 , two , three} ;
与const int one = 1; const int two = 2; const int three = 3;
差不多是一样的.
这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作。
#include <iostream> using namespace std; int main() { enum egg {a,b,c}; //egg当作一种type enum egg test; //在这里你可以简写成egg test; test = c; /*对枚举变量test进行赋予元素操作,这里之所以叫赋元素操作不叫赋值操作就是为了让大家明白枚举变量是不能直接赋予算数值的,例如(test=1;)这样的操作都是不被编译器所接受的,正确的方式是先进行强制类型转换例如(test = (enum egg) 0;)*/ if (test==c) { cout <<"枚举变量判断:test枚举对应的枚举元素是c" << endl; } if (test==2) { cout <<"枚举变量判断:test枚举元素的值是2" << endl; } cout << a << "|" << b << "|" << test <<endl; test = (enum egg) 0; //强制类型转换 cout << "枚举变量test值改变为:" << test <<endl; }----------- Output --------------------枚举变量判断:test枚举对应的枚举元素是c枚举变量判断:test枚举元素的值是20|1|2枚举变量test值改变为:0
- 枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自动提升为算术类型的
#include <iostream> using namespace std; int main() { enum test {a,b}; int c=1+b; //自动提升为算术类型 cout << c <<endl; } ----------- Output --------------------2
Reference:
深入理解C++枚举类型enum
三个月挑战c++——作者:管宁
0 0
- 【转】C++中的引用类型和枚举类型
- Objective-C中的枚举类型
- Objective-C中的枚举类型
- C/C++中的枚举类型
- C++中的联合体类型和枚举类型
- C++/CLI中的引用类型
- 【引用】C中的类型转换
- C#.NET中的DateTime类型和DateTimeKind枚举
- 枚举类型(C和C++中的差别)
- .NET 4.5(C#):TypeInfo类型和反射中的成员枚举
- C#中的值类型和引用类型
- C#中的值类型和引用类型
- C#中的值类型和引用类型
- C# 中的值类型和引用类型
- C# 中的引用类型和值类型
- C#中的引用类型和值类型
- .NET中的值类型和引用类型~~~
- .NET中的值类型和引用类型
- react-native制作新手引导组件
- 【托福】做TPO遇到的坑的记录
- struts2中的struts.xml配置文件详解
- 设置navicat数据库主键自增 1062报错以及result in duplicate entry '' for key 'primary'
- C#基础-数据类型
- 【转】C++中的引用类型和枚举类型
- Python 时间戳和日期相互转换
- 20170316#cs231n#8.Convolutional Neural Networks
- Python 爬虫 糗事百科 (改)
- 移动端与PHP服务端接口通信流程设计(基础版)
- React-Native ref用法和setNativeProps
- ELGG的开发学习
- 美国当局找到了2014年雅虎5亿数据泄露的罪魁祸首?
- TCP之RST发送场景