C++中引用和const关键字介绍

目录
  • 引用
  • 常引用
  • const关键字用法
    • 1)定义常量
    • 2)定义常量指针
    • 3)定义常引用
  • 总结

引用

下面的写法定义了一个引用,并将其初始化为引用某个变量。
类型名 & 引用名 = 某变量名;

int n = 4;
int & r = n; // r 引用了n,r的类型是 int &

某个变量的引用,等价于这个变量,相当于该变量的一个别名。

int n = 7;
int & r = n;	// r 引用了n,r和n就是一回事
r = 4;
cout << r;		// 输出4
cout << n;		// 输出4
n = 5;
cout << 4;		// 输出5

定义引用时一定要将其初始化成引用某个变量。
初始化之后,它就一直引用该变量,不会再引用别的变量了。
引用只能引用变量,不能引用常量和表达式。

double a = 4, b = 5;
double & r1 = a;	// r1引用了a
double & r2 = r1;	// r2也引用了a
r2 = 10;			// a修改为10
cout << a << endl;	// 输出10
r1 = b;				// 用b的值对r1进行赋值,并非r1改为引用b,因为引用是“从一而终”的
cout << a << endl;	// 输出5

常引用

定义引用时,前面加const关键字,即为“常引用”。

int n;
const int & r = n; // r的类型是const int &

不能通过常引用去修改其引用的内容:
并不是说引用的内容不能被修改

int n = 100;
const int & r = n;
r = 200; // 编译错误
n = 300; // ok

常引用和非常引用的转换
const T &和T &是不同的类型。
T &类型的引用或T类型的变量可以用来初始化const T &类型的引用。
const T类型的常变量和const T &类型的引用则不能用来初始化T &类型的引用,除非进行强制类型转换。

const关键字用法

1)定义常量

const int MAX_VAL = 23;
const double PI = 3.14;
const string NAME = "Tommy";

2)定义常量指针

不能通过常量指针修改其指向的内容,但内容本身可以被修改,且常量指针的指向可以变化。

int n, m;
const int *p = &n;
*p = 5;	// 编译错误
n = 4;	// ok
p = &m;	// ok,常量指针的指向可以变化

不能把常量指针赋值给非常量指针,反过来可以。

const int *p1;
int *p2;
p1 = p2;		// ok
p2 = p1;		// error
p2 = (int*)p1;	// ok,强制类型转换

[注] 因为常量指针对其所指向的内容没有修改权限,自然也不能赋予别的指针这样的权限。否则,非常量指针接收常量指针的赋值之后,便可以修改所指向的内容了,这存在一定安全隐患。

函数参数为常量指针时,可避免函数内部不小心改变参数指针所指地方的内容。

void MyPrintf(const char *p)
{
	strcpy(p, "this"); 	// 编译出错
	printf("%s", p);	// ok
}

3)定义常引用

不能通过常引用修改其引用的变量

int n;
const int & r = n;
r = 5; // error
n = 4; // ok

总结

到此这篇关于C++中引用和const关键字介绍的文章就介绍到这了,更多相关C++引用和const关键字内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++引用的使用与const修饰符

    目录 1.引用 2.函数引用传递 3.引用与const 4.const修饰符的优点 1.引用 引用是给已经定义的变量一个别名,可以简单理解成同一个变量的昵称.既然是昵称或者是别名,显然它和原本的变量名有着同样的效力.所以我们对别名进行修改,原本的变量值也一样会发生变化. 我们通过符号&来表明引用, 比如下面这个例子,我们创建了a变量的一个引用b int a = 3; int &b = a; b++; cout << a << endl; 由于b是a的一个引用,本质上

  • C++ const引用、临时变量 引用参数详解

    C++引用-临时变量.引用参数和const引用 如果实参与引用参数不匹配,C++将生成临时变量.如果引用参数是const,则编译器在下面两种情况下生成临时变量: 实参类型是正确的,但不是左值 实参类型不正确,但可以转换为正确的类型 左值参数是可被引用的数据对象,例如,变量.数组元素.结构成员.引用和被解除引用的指针都是左值,非左值包括字面常量和包含多项式的表达式.定义一个函数 Double refcube(const double& ra) { Returnra*ra*ra; } double

  • c++ const引用与非const引用介绍

    const引用是指向const对象的引用. 复制代码 代码如下: const int i = 10; const int &ref = i; 可以读取ref,但不能修改.这样做是有意义的,因为i本身就不可修改,当然也不能通过ref来修改了.所以也就有将const变量赋值给非const引用是非法的. 复制代码 代码如下: int &ref1 = i; // error: nonconst reference to a const object 非const引用是指向非const类型变量的引用

  • 浅析C++的引用与const指针与各种传递方式

    浅析C++的引用与const指针与各种传递方式 首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量:而 int * const p 跟上面是不一样的,即 p 是常量:我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟  int * const p   的性质很像. 其实引用的底层就是用const指针来实现的.下面举个小例子: #include <iostream> us

  • C++中引用和const关键字介绍

    目录 引用 常引用 const关键字用法 1)定义常量 2)定义常量指针 3)定义常引用 总结 引用 下面的写法定义了一个引用,并将其初始化为引用某个变量.类型名 & 引用名 = 某变量名; int n = 4; int & r = n; // r 引用了n,r的类型是 int & 某个变量的引用,等价于这个变量,相当于该变量的一个别名. int n = 7; int & r = n; // r 引用了n,r和n就是一回事 r = 4; cout << r; /

  • 详解C++ 左值引用与 const 关键字

    左值引用是已定义的变量的别名,其主要用途是用作函数的形参,将 const 关键字用于左值引用时,其在初始化时可接受的赋值形式变得更加广泛了,这里来总结一下. 左值引用是已定义的变量的别名,其主要用途是用作函数的形参,通过将左值引用变量用作参数,函数将使用原始数据,而不是副本.引用变量必须在声明时同时初始化,可将 const 关键字用于左值引用,如下所示: //声明并初始化常规左值引用变量 int x = 55; int & rx = x; //将const关键字用于左值引用变量,以下几种为等效表

  • php中static和const关键字用法分析

    本文实例讲述了php中static和const关键字用法.分享给大家供大家参考,具体如下: static关键字在类中描述的成员属性和成员函数都是静态的. static成员能限制外部的访问,因为static成员是属于类的,而不是属于任何对象实例. 从内存的角度讲,其中对象是放在"堆内存"中,对象的引用是放在"栈内存"中,而静态成员被放在初始化静态段中,在类的第一次加载的时候加入的.可以让对内存中的所有对象所共享.如下图所示: <?php class Person

  • 理解PHP5中static和const关键字的区别

    PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) static static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护.类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类

  • 详解C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 const int a = 10; int const b = 20; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了,而且编译器也不允许不赋初值的写法: 在C++中不赋初值的表达一写出来,编译器即报错,且编译不通过. 在C中不赋初值的表达写出来时不报错,编译时只有警告,编译可以通过.而

  • C/C++ 中const关键字的用法小结

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性. Const作用 NO. 作用 说明 参考 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误 void f(const int i) { ---} //对传入的参数进行类型检查,不匹配进行提示 3 可以保护被修

  • 详解C++中的const关键字及与C语言中const的区别

    const对象默认为文件的局部变量,与其他变量不同,除非特别说明,在全局作用域的const变量时定义该对象的文件局部变量.此变量只存在于那个文件中中,不能别其他文件访问.要是const变量能在其他文件中访问,必须显示的指定extern(c中也是)   当你只在定义该const常量的文件中使用该常量时,c++不给你的const常量分配空间--这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c = 0:相当于#define c 0:    当在当前文件之外使用

  • C++编程中的const关键字常见用法总结

    1.定义常量 (1)const修饰变量,以下两种定义形式在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的. TYPE const ValueName = value; const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义. extend const int ValueName = value; 2.指针使用CONS

  • Java中super关键字介绍以及super()的使用

    目录 1.super的使用: 2.先复习一下this关键字的使用. 3.super关键字: 总结: 1.super的使用: (1)super是一个关键字. (2)super和this很类似,我们对比着学习. 2.先复习一下this关键字的使用. (1)this能出现在实例方法和构造方法中: (2)this的语法是“this.”和“this()”: (3)this不能出现在静态方法中: (4)this大部分情况下是可以省略的: (5)this.什么时候不能省略呢? 在区分局部变量和实例变量时不能省

  • .NET 中的 常量字段const应用介绍

    C#中,当使用常数符号const时,编译器首先从定义常数的模块的元数据中找出该符号,并直接取出常数的值,然后将之嵌入到编译后产生的IL代码中,所以常数在运行时不需要分配任何内存,当然也就无法获取常数的地址,也无法使用引用了. 如下代码: 复制代码 代码如下: public class ConstTest { public const int ConstInt = 1000; } 将其编译成ConstTest.dll文件,并在如下代码中引用此ConstTest.dll文件. 复制代码 代码如下:

随机推荐