做摄影网站的目的是什么意思,网页制作模板html,开发公司延迟缴纳维修基金申请书,广安建设企业网站C笔记之左值与右值、右值引用
code review! 文章目录 C笔记之左值与右值、右值引用1.左值与右值2.右值引用——关于int r 10;3.右值引用——对比int r 10;和int r 10;4.右值引用#xff08;rvalue reference#xff09;的概念 1.左值与右值 2.…C笔记之左值与右值、右值引用
code review! 文章目录 C笔记之左值与右值、右值引用1.左值与右值2.右值引用——关于int r 10;3.右值引用——对比int r 10;和int r 10;4.右值引用rvalue reference的概念 1.左值与右值 2.右值引用——关于int r 10;
当声明 int r 10; 时发生了以下操作
1. int r: 这是一个声明语句它创建了一个名为 r 的变量其类型是一个右值引用。int 表示这是一个指向 int 类型的右值引用。
2. 10: 这是一个赋值操作将右边的表达式的值分配给左边的变量。
因此int r 10; 声明了一个名为 r 的变量它是一个右值引用然后将整数值 10 赋值给了这个变量。
现在让我们来详细解释这个代码
1. int r: 这部分声明了一个名为 r 的变量它是一个右值引用。右值引用允许 r 绑定到一个右值临时值。在这里r 是一个指向 int 类型的右值引用。
2. 10: 这部分将右边的表达式的值分配给左边的变量 r。右边的表达式是 10它是一个字面量整数因此是一个右值。
综合起来int r 10; 表示将整数值 10 绑定到一个右值引用 r。因为 10 是一个右值而 r 是一个右值引用所以这个赋值是有效的。
这样的声明和赋值操作实际上是在C中利用右值引用的一个典型用例。“右值引用允许您在不复制数据的情况下绑定到临时值这对于实现移动语义和高效资源管理非常有用”。在这个例子中r 是一个指向右值 10 的引用因此您可以在代码中使用 r就像您在使用常规引用一样。
3.右值引用——对比int r 10;和int r 10;
让我们对比一下上述两行代码分别使用右值引用和常规引用来初始化变量
1. int r 10;
这行代码声明了一个名为 r 的变量它是一个右值引用。10 是一个右值因为它是一个字面量没有具名的内存位置。r 是一个指向 int 类型的右值引用因此它可以绑定到右值。这里我们创建了一个右值引用 r 并将其绑定到右值 10。
2. int r 10;
这行代码声明了一个名为 r 的变量它是一个常规引用。10 是一个右值但是在这里它被绑定到一个常规引用 r这在语法上是合法的。然而这样的代码是危险的因为右值引用包括常规引用通常用于捕获左值即具名的内存位置以便可以使用它们。将右值直接绑定到常规引用可能导致悬空引用因为 10 是一个临时值一旦表达式结束它将不再存在。
在实际使用中常规引用应该用于捕获左值以便能够延长对象的生命周期。右值引用通常用于实现移动语义和完美转发等高级特性。
总结 - int r 10; 将右值 10 绑定到一个右值引用 r在合适的上下文中可以用于实现移动语义和完美转发。 - int r 10; 将右值 10 绑定到一个常规引用 r这在语法上是合法的但可能导致悬空引用。通常情况下常规引用应该用于捕获左值。
4.右值引用rvalue reference的概念