C++ 中的双与号
Haider Ali
2023年10月12日
本指南将讨论 C++ 中的双 & 符号。它实际上是在 C++11 的概念中。
你可能已经在声明变量时看到过双与号 (&&
)。要理解这个概念的各个方面,我们需要了解 C++ 的一些基础知识。
C++ 中的双与号
要理解双与号 (&&
),我们需要了解 C++ 中的 lvalues
和 rvalues
。让我们在以下小节中理解这些术语。
C++ 中的左值
lvalue
被认为是一个对象或变量,可以占用主存储器或 RAM 中的可识别空间。例如,看看下面的代码。
int number = 10;
number
在上面的代码中被认为是一个 lvalue
。我们通过将其设为指针来获取其位置/地址。
// this is pointer to varible
int *ptr_Number = &number;
// here we'll get the address of variable in memory;
cout << ptr_Number << endl;
// object example
C++ 中的 rvalue
rvalue
是在内存中没有任何可识别空间的对象或变量。它也被认为是一个临时值。
看看下面的代码。
int number = 10;
number
是上面代码中的 lvalue
,但 10
是 rvalue
。如果我们尝试获取数字 10
地址,我们会得到一个错误。
// int *ptr_10 = &10;
//(error) expression must be an lvalue
在 C++11 中,双 & 符号指的是 rvalue
。现在,让我们考虑两种方法。
一个带有单&符号,另一个带有双&符号。
如果你尝试将 lvalue
传递给函数,你将收到错误消息。所以基本上,双&符号的主要目的是引用 rvalues
。
// single ampersand sign is used to refer lvalue
int add(int &a, int &b) { return a + b; }
// double ampersand sign is used to refer rvalue
int add_(int &&a, int &&b) { return a + b; }
int main() {
// here we pass lvalue to the function
int num1 = 10;
int num2 = 30;
int sum = add(num1, num2);
cout << sum << endl;
// it will give the error if we pass the rvalues to that function
// int sum_1= add(10,30);
//(error) initial value of reference to non-const must be an lvalue
// c++11 provides the facility of passing rvalues by using double ampersand
// sign
int sum_1 = add_(10, 30);
cout << endl;
}
作者: Haider Ali
Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.
LinkedIn