什么是C++;? < C++中的引用变量的简短定义是什么?
引用变量允许两个变量名来处理相同的内存位置:什么是C++;? < C++中的引用变量的简短定义是什么?,c++,reference,variables,C++,Reference,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 << "var
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;
}
intmain()
{
int-var1;
//var2是一个参考变量,与var1具有相同的值
int&var2=var1;
var1=10;
std::cout这是一个引用另一个变量的变量:
int foo;
int& bar = foo;
bar
现在是一个引用,也就是说bar
保存foo
所在的内存位置
<>请参阅更多信息。。[从C++ FAQ ]。
< P>第一段可以很容易地用作一个简短的定义:
<>在C++程序设计语言中,引用是一个简单的引用数据类型,它比C.</P>继承的指针类型更强大,但更安全。
并引述同一篇文章:
C++引用与指针在几个基本方面有所不同:
- 定义引用对象后,不可能直接引用该对象;其名称的任何出现都直接引用它引用的对象
- 一旦创建了一个引用,以后就不能使它引用另一个对象;它不能被重置。这通常是通过指针来完成的
- 引用不能为null,而指针可以;每个引用都引用某个对象,尽管它可能有效,也可能无效
- 无法取消初始化引用。由于无法重新初始化引用,因此必须在创建引用后立即对其进行初始化。特别是,必须在定义局部变量和全局变量的位置对其进行初始化,并且作为类实例的数据成员的引用必须在CLA的初始化器列表中进行初始化s的构造函数
进一步阅读:
引用是另一个对象的别名实体
引用不是变量,因为变量只由对象的声明引入。对象是存储区域,在C++中,引用不必占用任何存储。
对象和引用是C++中不同实体的组,因此“引用变量”一词没有意义。< /P> < P>引用变量为先前定义的变量提供别名(替代名称)。
例如:
float total=100;
float &sum = total;
这意味着total
和sum
都是相同的变量
cout<< total;
cout << sum;
coutA参考变量和A指针变量对于机器来说是完全相同的(编译器将生成相同的机器代码)
据我所知,与指针变量相比,使用引用变量最明显的优点是:
易于理解(无地址,删除各种令人头痛的内容)
为您节省了一点点的打字,因此可能更少出错
在下面的代码中,左侧使用一个引用变量,右侧使用一个指针变量。它们对机器来说是一样的,但是您可以看到,使用引用变量可以节省一点输入
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
参考变量指针变量
int a=1;~~~~~~~ int a=1;
int&b=a;~~~~~~int*b=&a;
b=2;~~~~~~~*b=2;
cout引用是初始化对象的替代标签,别名。一旦初始化引用,就不能将其更改为其他对象的替代标签或别名。初始化后,引用或对象变量可以互换使用
引用具有指向对象的常量指针的一些特征,即它在定义时被初始化。虽然它引用或指向的对象可以更改,但引用或常量指针本身不能更改。但是,由于引用是一个替代标签或别名,它可能作为数据对象存在,也可能不作为数据对象存在nlike const指针,除非编译器能够优化它,否则它可能会存在。即使编译器将引用创建为实际实体,这也是编译器内务管理,应该忽略它,因为它与翡翠城幕后的人不太一样
以下代码示例给出了将引用与指针和常量指针进行比较和对比的示例:
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
引用
< C++ > C++ > C++之前,引用了C++语言中的一个引用,在C++ 11中引入了一个<代码> rValue/Cord>Read,允许引用一个临时对象来帮助做一个移动,而不是一个拷贝,以及其他一些操作,其中一个拷贝是错误的方法,但是移动是正确的方法。
例如,在以下简单源代码行中比较左值引用和右值引用。因为它们是int
引用,这意味着非整数值的赋值会导致编译器进行转换,从而产生临时变量。rvalue
引用可以绑定到临时变量able和左值
引用不能
// 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
参考变量是变量名的别名
它与指针的不同之处在于:
您不能有空引用。您必须始终能够假定引用连接到合法的存储
一旦一个引用被初始化为一个对象,它就不能被更改为指向任何其他对象,而在指针的情况下,我们可以使它在任何时候指向任何其他对象
引用必须在创建时初始化。指针可以在任何时候初始化
参考变量(让a
),只需简单地说一下即可