C++:引用引用,Stroustrup示例
C++: References to References, Stroustrup Example
Stroustrup C++第 4 版第 196 页有一个名为 Reference to References 的部分。 我已经包含了代码。 有没有人有使用这些参考文献的情况的例子?
我正在经历一个具有挑战性的概念化时间。 谢谢
using rr_i = int&&;
using lr_i = int&;
using rr_rr_i = rr_i&&; // ‘‘int && &&’’ is an int&&
using lr_rr_i = rr_i&; // ‘‘int && &’’ is an int&
using rr_lr_i = lr_i&&; // ‘‘int & &&’’ is an int&
using lr_lr_i = lr_i&; // ‘‘int & &’’ is an int&
换句话说,左值引用总是获胜。
他们不会。
注释显示删除了"额外"引用。这是一件好事,因为否则程序将是无效的(因为语言中没有"对引用的引用"(。
[dcl.ref]/6
:如果一个typedef-name([dcl.typedef],[temp.param](或decltype-specifier表示一个类型TR
,它是对类型T
的引用,则尝试创建类型"对cvTR
的左值引用"将创建类型"对T
的左值引用",而尝试创建类型"对cvTR
的右值引用"将创建类型TR
。[ 注意:此规则称为引用折叠。— 尾注 ] [ 示例:int i; typedef int& LRI; typedef int&& RRI; LRI& r1 = i; // r1 has the type int& const LRI& r2 = i; // r2 has the type int& const LRI&& r3 = i; // r3 has the type int& RRI& r4 = i; // r4 has the type int& RRI&& r5 = 5; // r5 has the type int&& decltype(r2)& r6 = i; // r6 has the type int& decltype(r2)&& r7 = i; // r7 has the type int&
— 结束示例 ]
这是一个使模板编程更容易的工具:您不必自己剥离"冗余"引用。可以说,您不会经常遇到对此的需求,但是在具有大量模板和/或别名的更复杂的代码库中,可能会发生这种情况。
当您有这样的函数模板时:
template <typename T>
void foo(T&& arg)
并传递一个左值int
,那么你的arg
将是一个int&
;如果你传递一个右值int
,那么它将是一个int&&
。这称为"转发引用"(或"通用引用"(,与引用折叠的规则不同,尽管它在使模板编程更轻松方面确实具有类似的实用性。
这是一个参考
int i;
int& ii = i;
不能引用引用。这不是对参考的引用。ii 和 iii 都是对 i 的引用:
int i;
int& ii = i;
int& iii = ii;
这是一个右值引用
int&& r = 123;
这是无稽之谈,编译会失败。
int i;
int& ii = i;
int&& nonsense = ⅈ//fail compilation
int&& nonsense2 = i;//fail compilation
但是指针可以被指向和引用
int i, j;
int* p = &i;
int** pp = &p;
int*& rp = p;
rp = &j;
相关文章:
- 运行veins_inet示例 - 未定义的引用的 Omnet++ 问题
- C++:引用引用,Stroustrup示例
- 尝试使用 MinGW/CMake 构建 GLFW 示例时未定义的引用
- 运行 Cplex 示例:未定义的引用
- 谷歌语音识别(cpp示例):对AssignDescriptors()的未定义引用
- cocos2d-x 编辑框的简单示例,错误未定义引用
- 常量引用与具体示例的混淆
- gtkmm3 示例未编译(未定义的引用)
- C++右值引用行为(具体示例)
- 这是通过引用分配的正确示例吗?
- 未能构建opencv jni示例-opencv示例-本机活动(未定义引用)
- V8 "Hello World"示例 - 在 Ubuntu 13.10 上编译 - 大量未定义的引用错误 "icu_46"
- 在 FreeBSD 上构建 lixml++ 示例时对 glib 的未定义引用
- 右值引用匹配(完全转发示例)
- 对' vtable '的未定义引用(最小示例)
- 为什么在这个代码示例中发生与返回const引用相关的运行时错误
- Antlr C运行时中的未定义引用示例
- 将非常量引用绑定到临时对象 - 可能发生这种情况的示例
- 此示例中使用取消引用运算符 (c++)
- 在OpenCV Mat::t文档示例中引用的lambda是什么?