C++中 int i 与 int &i 注意事项
来源:http://blog.csdn.net/qianchenglenger/article/details/16949689
1.int i 传值,int & i 传引用
int i不会回带参数,而int &i可以回带参数,如
- #include <iostream>
- void test1(int i)
- {
- i = 7;
- }
- void test2(int &i) //要限制参数改动,可以加const限制
- {
- i = 7;
- }
- int main()
- {
- int t1 = 10;
- test1(t1);
- std::cout << t1 << std::endl; //输出为10
- int t2 = 10;
- test2(t2);
- std::cout << t2 << std::endl; //输出为7
- return 0;
- }
2. int i 可赋予常量,而int & i 不能
- #include <iostream>
- void test1(int i)
- {
- i = 7;
- }
- void test2(int &i)
- {
- i = 7;
- }
- int main()
- {
- int i = 10; //合法
- int &i1 = 10; //编译错误
- test1(10); //合法
- test2(10); //编译错误
- return 0;
- }
3. int &i 相当于别名,而int i 只是拷贝
- #include <iostream>
- int main()
- {
- int t1 = 10;
- int t2 = 10;
- int i1 = t1; //复制
- int &i2 = t2; //别名
- i1 = 7;
- i2 = 7;
- std::cout << t1 << std::endl; //输出10
- std::cout << t2 << std::endl; //输出7
- return 0;
- }
最后,我们再来看一下个例子
- #include <iostream>
- class A{
- public:
- A(int a, int b):i1(a),i2(b){};
- public:
- int i1;
- int &i2;
- };
- int main()
- {
- A a(45,60);
- std::cout << a.i1 << " " << a.i2 << std::endl;
- return 0;
- }
在电脑上运行之后,你会发现,第一个数字正常,而第二个数字明显是一个未定义的值,例如我运行后得到的结果是
45 1400458944
这是因为我们在构造一个对象的时候,调用了构造函数,而A的构造函数的参数传递为传值方式,所以,当调用时,相当于有一个
- int b = 60
- int &i2 = b;
而当构造函数调用完成,b的作用域结束,b被销毁,而i2指向一个已经被销毁的地方,所以会出现未定义的运行结果。
我们再贴一段程序,和上面的一段相对应,只是,这次,我们将会获得 45 60 的结果
- #include <iostream>
- class A{
- public:
- A(int a, int &b):i1(a),i2(b){};
- public:
- int i1;
- int &i2;
- };
- int main()
- {
- int t = 60;
- A a(45,t);
- std::cout << a.i1 << " " << a.i2 << std::endl;
- return 0;
- }
C++中 int i 与 int &i 注意事项的更多相关文章
- C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
转自:http://www.cnblogs.com/leolis/p/3968943.html 在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为 整型(int)来讲, ...
- C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别 <转>
作者:Statmoon 出处:http://leolis.cnblogs.com/ 在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法 ...
- MySql中的tinying,smallint,int,bigint的类型介绍——转载
tinyint 从 0 到 255 的整型数据.存储大小为 1 字节. smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据.存储大小为 2 个字节 ...
- C#/C++ 中字节数组与int类型转换
1.C#中int和byte[]转换: /// <summary> /// 把int32类型的数据转存到4个字节的byte数组中 /// </summary> /// <p ...
- 嵌入式中的 *(volatile unsigned int *)0x500 解释
C语言中*(volatile unsigned int *)0x500的解释: 如下: (unsigned int *)0x500:将地址0x500强制转化为int型指针*(unsigned int ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- MVC Action,Service中筛选int 和list<int>
action: public ActionResult DeleteByID(int id) { this.MessageService.DeleteMailTemplate(id); var fro ...
- c++ 中关于int,unsigned int , short的关系与应用
转载:http://www.cppblog.com/xyjzsh/archive/2010/10/20/130554.aspx?opt=admin int类型比较特殊,具体的字节数同机器字长和编译 ...
- [转载] java中byte数组与int,long,short间的转换
文章转载自http://blog.csdn.net/leetcworks/article/details/7390731 package com.util; /** * * <ul> * ...
- 【转】java中byte数组与int类型的转换(两种方式)----不错
原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...
随机推荐
- springmvc使用步骤
1.导包 2.在web.xml文件中配置前端控制器dispatchServlet 3.创建springmvc配置文件springmvc.xml 4.编写controller 5.在springmvc中 ...
- mysql 之审计 init-connect+binlog完成审计功能
mysql基于init-connect+binlog完成审计功能 目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是my ...
- Hibernate 抓取策略
抓取策略: 为了改变SQL语句执行的方式 当应用程序需要在Hibernate实体对象的关联关系间进行导航的时候,Hibernate如何获取关联对象的策略 抓取策略可以在O/R映射的元数据中声明,也可以 ...
- MybatisUtil的使用,便于产生SqlSession
简化代码,实现一个静态的工具类来实现获取SqlSession 主要有getSqlSessionFactory()和getSqlSession() public class MybatisUtil { ...
- RabbitMQ install (Ubuntu)
1. key 1) Online way apt-key adv --keyserver "hkps.pool.sks-keyservers.net" --recv-keys &q ...
- VMware网络桥接模式与NAT模式共存
对虚拟机有时我们会有一种需求,即需要虚拟机可以作为单独的主机拥有自己的独立IP,也希望宿主机可以通过NAT模式映射端口到虚拟机. 那么此时怎么办那,其实很简单,虚拟机是支持多网卡设置的,只要在虚拟 ...
- TableStore:多行数据操作
1.批量写 public static void batchWriteRow(SyncClient client) { BatchWriteRowRequest request = new Batch ...
- git回滚到某个版本操作
git回滚到某个版本操作: 1.git log //查看指过去的版本 2. git reset --hard 复制上面commit后的字符串到此处 如果只想 回滚单机的,那么到上面就结束,如果 ...
- redis下操作hash对象
redis下操作hash对象 hash用于存储对象,对象的格式为键值对 命令 设置 设置单个属性 HSET key field value 设置多个属性 HMSET key field value [ ...
- js调用打印机打印
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...