`
yshlin
  • 浏览: 63220 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C++下的引用类型(C++入门)

    博客分类:
  • c++
阅读更多

引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。 引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &s;),这里我们就定义了一个int类型的名为s 的引用,但是int &s;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &s=变量名;)。

#include <iostream>  
using namespace std;  
  
void main(void)  
{  
  
int a=10;  
int &s=a;  
s=s+2;  
  
cout << &a << "|" << &s << "|" << a << "|" <<s<< endl;  
  
cin.get();  
} 

 
  观察并编译运行上面的代码你会发现&a和&s的地址显示是相同的,a和s的值显示也是一样的!
  结合前一个教程的内容我们来说一下const引用的相关内容,这里要特别注意,和前一个教程一样带const修饰的引用同样也容易混淆概念!

  const修饰如果用在引用上会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的下面我们来看一个例子:

#include <iostream>  

using namespace std;  

void main(void)  

{  

int a=10;  

//double &s = a + 1.2f; //这句就是错误的!  

const double &s = a + 1.2f;  

cout << &a << "|" << &s << "|" << a << "|" <<s << endl;  

cin.get();  

}

 
  上面的代码足够说明问题了,这就是const修饰带来的好处,但是聪明的人会在输出的时候发现一个问题,就是a和s的值的输出不同,按照最先说的道理应该可以改变a的值呀,为什么在这里却有没有能够改变呢?

  道理是这样的,const修饰过后的引用在编译器内部是这样进行变化的。

int a=10;  
const double &s= a + 1.2f;


  这样的一段代码在编译器认为却是下面的方式进行的

int a=10;  
int temp = a;  
const double &s = temp + 12.f


  这里其实是把a的值赋给了一个临时temp 变量,而后test获得的却是temp+12.f 改变的是temp而不是a,所以就出现了a和s显示的值不同的情况,这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么!

分享到:
评论

相关推荐

    C++快速入门教程

    了解这些新特性,如C++11中的lambda表达式、右值引用和自动类型推断,可以帮助你编写出更现代、更高效的代码。 在这个快速入门教程中,你应该会逐步接触并掌握这些知识点,通过实践和不断学习,将能够熟练运用C++...

    快速入门的c++课件

    C++7.ppt和C++11.ppt、C++12.ppt则可能涉及C++11及以后版本的新特性,比如右值引用(rvalue reference)、移动语义(move semantics)、自动类型推断(auto keyword)、lambda表达式、范围for循环等,这些都是现代...

    谭浩强c++入门书籍

    《谭浩强C++入门书籍》是一本专为初学者设计的C++编程教程,由著名计算机教育专家谭浩强编著,由清华大学出版社出版。这本书深入浅出地介绍了C++语言的基础知识,旨在帮助读者快速掌握这门强大的编程语言。 C++是在...

    c++入门进阶书籍

    9. **C++11及以后的更新**:了解C++11、C++14、C++17等新标准引入的新特性,如lambda表达式、右值引用、自动类型推断(auto)和初始化列表等。 10. **实践编程**:理论知识结合实际项目练习,通过编写小程序或参与...

    c++入门学习例题

    以下是对"C++入门学习例题"的相关知识点进行的详细说明。 1. **基础语法**:C++的基本语法与C语言相似,包括变量声明、数据类型(如int, float, char等)、运算符(如+,-,*,/等)、流程控制语句(如if,switch,...

    C++从入门到精通(国家863)

    从上述知识点可以看出,《C++从入门到精通》这本书不仅覆盖了C++的基础语法,还深入介绍了面向对象编程的核心概念,以及一些高级主题如模板、异常处理等。通过系统地学习这些内容,读者可以逐步掌握C++编程,并为...

    c++入门语法大全资料

    "C++入门语法大全资料"是一份专为初学者设计的资源,旨在帮助新接触C++的学员快速掌握语言基础。 在C++中,语法是其核心部分,它规定了如何组织代码以让计算机理解。以下是一些关键的C++语法知识点: 1. **基本...

    C++入门到精通的四本书超经典.rar

    "C++入门到精通的四本书超经典.rar"这个压缩包包含的资源,旨在帮助初学者逐步理解并精通C++。 第一本可能涵盖的基础知识是C++的基础语法,包括变量、数据类型、运算符、流程控制(如if语句、switch语句、循环结构...

    C++入门课件PPT

    C++入门课件PPT通常会涵盖以下关键知识点: 1. **基础语法**:包括变量、数据类型(如int、char、float等)、运算符(算术、比较、逻辑等)、流程控制(如if条件语句、for循环、while循环)。 2. **类与对象**:...

    C++入门指南-v2.4.pdf

    这是DS小龙哥编写整理的C++入门指南PDF文档,适合C++初学者,C语言转C++工程师当做入门工具书学习。PDF里有完整示例、知识讲解,平时开发都可以复制粘贴,非常便捷。 目前一共写了7章,后续会持续更新资源包,更新后...

    C++从入门到精通(第4版) PPT电子课件( 可供教学参考).7z

    最后,C++11、C++14、C++17及更高版本引入了许多新特性,如智能指针、lambda表达式、右值引用、并发编程支持等,这些都使C++更加现代化,提升了开发效率和代码质量。 总之,《C++从入门到精通(第4版)》PPT电子...

    c++从入门到精通(第2版)

    例如,C++11、C++14和C++17引入了诸如lambda表达式、右值引用、自动类型推导(auto关键字)、范围for循环等新特性,这些都极大地改进了C++的易用性和性能。学习这些现代C++特性,可以使代码更加简洁、高效。 此外,...

    C++入门到精通的四本书超经典工具

    下面,我们就根据标题和描述来详细探讨C++入门到精通的四本书可能会涵盖的知识点。 1. **C++基础知识**:入门阶段,书籍通常会介绍C++的基础语法,如变量、数据类型、运算符、流程控制(条件语句、循环语句)、函数...

    C++入门经典.rar

    《C++入门经典》是Ivor Horton所著的一部广受欢迎的编程教程,尤其适合初学者。这本书由清华大学出版社出版,具有很高的权威性和实用性。Ivor Horton是一位知名的计算机科学作家,他的著作以其清晰的讲解和丰富的...

    c++入门经典的代码

    《C++入门经典》是一本深受初学者喜爱的编程教材,它系统地介绍了C++语言的基础知识和核心概念。这本书分为24个章节,每个章节都配合有相应的代码示例,帮助读者通过实践来理解理论知识。以下是根据标题、描述以及...

    c++入门经典+源代码及课后练习答案.zip

    《C++入门经典》是一本深受初学者喜爱的编程教材,它系统地介绍了C++语言的基础知识和编程技巧。这份压缩包包含的就是该书的配套源代码和课后练习的答案,对于正在学习C++的人来说,这是一个非常宝贵的资源。 C++是...

    C++语言的入门教程---21天学通C++

    其中,第一篇是C++数据表达篇,主要内容包括:C++入门、变量和数据类型、运算符和表达式以及程序控制结构等;第二篇是C++面向过程设计篇,包括函数、编译预处理、数组、指针和构造数据类型等内容;第三篇是C++面向...

    C++讲稿C++入门课件

    "C++讲稿C++入门课件"是清华大学教师为初学者准备的教学资料,旨在帮助学生快速理解和掌握C++的基础知识。 C++的特点在于它的面向对象编程(OOP)特性,包括封装、继承和多态性。封装允许将数据和操作这些数据的...

Global site tag (gtag.js) - Google Analytics