什么是C ++中的引用variables?
C ++中引用variables的简短定义是什么?
引用是一个实体,是另一个对象的别名。
一个引用不是一个variables,因为一个variables只是由一个对象的声明引入的。 一个对象是一个存储区域,在C ++中,引用不(必然)占用任何存储空间。
由于对象和引用是C ++中实体的不同组合,所以术语“引用variables”是没有意义的。
引用variables为以前定义的variables提供别名(替代名称)。 例如:
float total=100; float &sum = total;
这意味着total
和sum
是相同的variables。
cout<< total; cout << sum;
两者都会给出相同的价值, 100
。 这里&
运算符不是地址运算符; float &
意味着对浮动的引用。
引用variables是对象的别名(替代名称) 。 [来自C ++常见问题]。
维基百科文章的第一段很容易作为一个简短的定义:
在C ++编程语言中,引用是一个简单的引用数据types,它比从Cinheritance的指针typesfunction较差但安全。
并从同一篇文章引用:
C ++引用在几个基本方面与指针不同:
定义之后不能直接引用参考对象; 其名称的任何出现都直接指向它所引用的对象。
一旦创build了引用,以后就不能引用另一个对象; 它不能被重新安装。 这通常是用指针来完成的。
引用不能为空,而指针可以; 每一个引用都指的是某个对象,虽然它可能是有效的也可能不是有效的。
引用不能被初始化。 由于不可能重新初始化引用,因此必须在创build引用后立即对其进行初始化。 特别是,局部variables和全局variables必须在定义的地方被初始化,并且作为类实例数据成员的引用必须在类的构造函数的初始化列表中被初始化。
进一步阅读:
- 维基百科:参考C ++
- Cprogramming.com:C ++参考
- 堆栈溢出:C ++中指针variables和引用variables之间的区别
这是一个引用另一个variables:
int foo; int& bar = foo;
bar
现在是一个参考,也就是说bar
举行记忆的地方在哪里foo
谎言。
在这里看到更多的信息。
C ++引用允许您为variables创build第二个名称,您可以使用该variables来读取或修改存储在该variables中的原始数据
更多详情请访问:
引用variables允许两个variables名称寻址相同的内存位置:
int main() { int var1; // var2 is a reference variable, holds same value as var1 int &var2 = var1; var1 = 10; std::cout << "var1 = " << var1 << std::endl; std::cout << "var2 = " << var2 << std::endl; }
资源: LINK
引用variables是variables名的别名 。
与以下方面的指针不同:
- 你不能有NULL引用。 您必须始终能够假定参考连接到合法的存储器。
- 一旦引用被初始化为一个对象,它就不能被改变为指向任何另一个对象,而在指针的情况下,我们可以随时指向任何其他对象。
- 创build时必须初始化引用。 指针可以在任何时候被初始化。
引用是用于初始化的对象的替代标签,别名。 一旦引用被初始化,它就不能被改变成一个替代的标签或其他对象的别名。 初始化后,引用或对象variables可以互换使用。
一个引用具有const对象的一些特性,因为它在被定义时被初始化。 而它所引用或指向的内容可以改变,引用或const指针本身不能被改变。 然而,由于引用是一个替代标签或别名,它可能或可能不会实际上作为一个数据对象存在,不像一个const指针,它可能存在,除非编译器可以优化它。 而且,即使编译器创build了一个实际的实体,也就是编译器pipe家,而且应该被忽略,因为它并不像Emerald City幕后的那个人那么存在。
以下代码示例给出了比较和比较引用与指针和常量指针的示例:
int myInt; // create a variable of type int, value not initialized int myInt2 = 3; // create a second variable of type int with a value of 3 int &rInt = myInt; // create a reference to the variable of type int, myInt rInt = 5; // myInt now has a value of 5, the reference is an alias for myInt rInt++; // myInt now has a value of 6, the reference is an alias for myInt rInt = myInt2; // myInt now has the same value as myInt2, a value of 3 int *pInt = &rInt; // pInt points to myInt (*pInt)++; // increments myInt pInt++; // increments the pointer which formerly pointed to myInt int &rInt2; // error C2530: 'rInt2' : references must be initialized int *pInt2; // just fine, uninitialized pointer is ok int * const pInt3; // error C2734: 'pInt3' : const object must be initialized if not extern int * const pInt4 = &myInt; // define and initialize const pointer pInt4 = &myInt2; // error C3892: 'pInt4' : you cannot assign to a variable that is const
实际上有两种引用: lvalue
引用和rvalue
引用。
lvalue
引用是C ++ 11之前的C ++语言中的相同引用。 在C ++ 11中引入了一个rvalue
引用,以允许引用临时对象来帮助执行移动操作,而不是复制操作和其他操作,其中副本是错误的方法,但移动是正确的方法。
例如,以下简单源代码行中的左值引用和右值引用的比较。 因为这些是int
引用,这意味着非整数值的赋值会导致编译器执行一个导致临时variables的转换。 rvalue
引用可以绑定到一个临时variables, lvalue
引用不能。
// assign a double to an int causing creation of temporary int &rIntd1 = 1.2; // error C2440: 'initializing' : cannot convert from 'double' to 'int &' int &&rIntd2 = 1.2; // warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data rInt = rIntd2; // myInt from the code above now has a value of 1, 1.2 was truncated when converting from double to int
引用variables和指针variables与机器完全相同(编译器将生成相同的机器码)。
在我所知的情况下,使用引用variables的指针variables的最明显的优点是:
- 容易理解 (没有地址,解除各种头痛的事情)
- 为您节省一点点打印 ,因此可能不太容易出错 。
在下面的代码中,左边是使用引用variables,右边是使用指针variables。 它们与机器是一样的,但是你看到使用参考variables可以节省一些打字的时间。
Reference variable Pointer variable int a = 1; ~~~~~~ int a = 1; int &b = a; ~~~~~~ int *b = &a; b = 2; ~~~~~~ *b = 2; cout << a << '\n' ~~~~~~ cout << a << '\n' ============================================== 2 ~~~~~~ 2
引用variables( let a
),只是为了便于理解,另一个variables名( let x
),它与let x
保持相同的确切位置。
int &a = x;
指的是a保存与x
相同的内存位置。
例如,说两个室友共用一个房间。 一个朋友的名字是x
,另一个朋友的名字是a
。 如果改变放置在房间中的桌子的位置,从位置(x,y,z)
到(x1,y1,z1)
则改变对朋友x
也是可见的,反之亦然。
引用是对象的替代名称。 引用variables为以前定义的variables提供别名。 引用声明由一个基本types和一个与variables名相等的引用variables组成。