241得票4回答
auto&&类型的变量是什么意思?

如果你看到这样的代码: ```cpp auto&& var = foo(); ``` 其中`foo`是返回类型为`T`的任何值的函数。那么`var`是一个类型为右值引用的左值。但是这对于`var`意味着什么呢?这是否意味着我们可以窃取`var`的资源?在什么情况下你应该使用`auto&&`...

172得票3回答
std::forward在传递左值/右值引用时是如何工作的,特别是如何工作的?

可能重复: std::forward的主要目的是什么,它解决了哪些问题? 我知道它的作用和使用时机,但我仍然无法理解它的工作原理。请尽可能详细地解释,如果允许使用模板参数推导,什么情况下使用std::forward会不正确。 我困惑的部分是: "如果有名字,它就是左值" - 如果是这样的话...

71得票2回答
通用引用和转发引用有什么区别?

这个函数的参数将会绑定到一个右值引用: void f(int && i); 然而,该函数的参数将绑定到rvalue或lvalue引用之一: template <typename T> void f(T && t); 我经常听到这被称为...

51得票1回答
在范围for循环中,`auto && e`是什么意思?

假设我当前编写基于范围的循环时的规则是: 尽可能使用for(auto const &e :...)或for(auto &e:...),而不是for(auto a: ...)。 我基于自己的经验和这个问题等原因。 但是在阅读了新的简洁的for循环之后,我想知道,我是否应...

37得票5回答
为什么转发引用的语法与右值引用相同?

我刚刚对这些(相当)新的功能进行了一些研究,我想知道为什么C++委员会决定为它们引入相同的语法?看起来开发人员不必要地要花费一些时间来理解它的工作原理,而且一个解决方案会让人想到更多的问题。在我的情况下,它始于一个可以简化为以下问题的问题: #include <iostream>...

33得票1回答
为什么添加const会将转发引用变成右值引用?

我一直在阅读斯科特关于C++11和14的最新杰作中关于通用引用的内容。尽管可以将参数分配给左值或右值类型的引用参数,但在其中有一种介于两者之间的通用引用,它可以根据传递的参数的类型特性来推断为左值或右值。我可以理解参数为什么被称为通用引用,但有一件事让我不太清楚,那就是为什么在类型参数cons...

30得票3回答
转发引用和右值引用共享相同的语法背后的原理是什么?

这是一个右值引用: void foo(int&& a); 它不与lvalues绑定。 int i = 42; foo(i); // error 这是一个通用的参考资料: template<typename T> void bar(T&&am...

27得票1回答
为什么范围-based for 循环使用 auto&& 来接收范围?

一个“基于范围的for语句”在§6.5.4中被定义为等同于: { auto && __range = range-init; for ( auto __begin = begin-expr, __end = end-expr; ...

25得票1回答
通用引用的标准/官方名称是什么?

我知道,如果一个变量或参数被声明为具有某个推导类型T的类型T&&,那么这个变量或参数通常被称为通用引用。 术语通用引用是由Scott Meyers在他的原始演讲“Universal References in C++11”中引入的。然而,我想知道官方/标准术语是什么通用引用。

23得票3回答
这是一个转发引用吗?

在这个由Scott Meyers提出的例子中,rvalue引用和转发引用的区别已经很清楚了: Widget&& var1 = someWidget; // here, “&&” means rvalue reference (1) auto&...