问题标签 [forwarding-reference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 无法从通用参考中捕获 lambda 中的参考?
我试图弄清楚为什么捕获的变量不能通过引用传递给 foo 函数,下面显示的程序没有编译并出现以下错误:
有什么方法可以将通用引用完美地转发到 lambda 中,以便通过引用捕获它以供以后使用?类型 T 也可能是 R 值或 R 值和 L 值的组合,因此它们不能总是通过引用来捕获。
c++ - 复杂元组捕获
我试图找出一种方法来捕获一个可变参数包,它可以由 l 和 r 值引用组成,并按值捕获 r 值,同时通过引用捕获 l 值以供以后使用(因此是异步测试)。我尝试了以下方法:
然而,这在执行 rvalues lambda 时会输出一个未定义的值。左值 lambda 输出所需的 50 而无需复制构造(可能与大对象一起使用)。是否有某种方法可以按值捕获 r 值,而无需复制构造由 l 值引用传递的对象,不知道我会得到什么样的 l 和 r 值组合?
链接到示例 shell http://cpp.sh/336lv
c++ - 理解通用引用的类型推导
设foo
函数:
T
以下调用将推导出什么类型foo
:
c++ - 显式模板实例化和转发引用
最近,我正在和学生讨论使用转发引用的模板限制类型的可能性。我知道用or来比较类型,但我们也谈到了显式模板实例化。is_same
static_assert
enable_if
以下示例适用于 GCC:
fh:
f.cpp:
主.cpp:
我不是显式模板实例化方面的专家,所以我只是想知道这样的解决方案是否可移植/符合标准。(请不要问我用例,我没有。对我来说,这纯粹是一个学术问题。)
更新
我对显式实例化(<int>(int&&)
和<int&>(int&)
)的格式也有点困惑,但我猜它是由模板推导给出的,可能是引用折叠规则。
c++ - 如何使用模板推导类型为右值和左值引用获取不同的重载?
我有一个foo
通过引用获取参数的函数,我希望它对右值和左值引用采取不同的行动。(我还应该提到foo()
尊重 constness;它不会改变引用的值。)我知道如果我写:
我声明了一个转发引用,而不是一个右值引用,这意味着:
可能不会得到我想要的。
所以,我的问题是:影响两种引用之间不同行为的正确方法是什么?
c++ - 如何使用 is_arithmetic 获取通用参考?
使用可变参数模板,我制作了对元素求和的函数。
它工作得很好,但我想添加一个 type_trait 测试来检查传递的所有参数是否都是数字类型。
如果我给出 r 值,它会起作用,但如果我给出左值,它会阻塞。
这似乎很正常,因为 is_arithmetic::value = false 用于引用数字类型(http://en.cppreference.com/w/cpp/types/is_arithmetic)。但是,在通用参考的情况下,我如何测试我的变量是数字的?
c++ - 转发引用的绑定优先级
有人可以帮我理解为什么以下代码输出T&&
而不是const A&
:
c++ - std::forward 和模板类型推导
我编写了以下小程序来了解 std::forward 的工作原理。
我希望得到以下输出:
但是,我得到以下结果,我无法解释:
因此,如果使用左值调用 foo,我希望 foo 将转发左值并调用 foo3 的左值版本。但是一直调用 foo3(T&&) 。我是否对 std::forward 的工作方式完全理解错误,还是有一个微妙的错误?或者更糟糕的是,代码是否应该像我预期的那样工作,也许我搞砸了我的编译器实现?顺便说一句。我正在使用 g++ 7.2
c++ - 为什么 std::move 将右值引用作为参数?
根据cppreference.com,move
有签名
为什么它需要一个右值引用T&& t
作为它的参数?
另外,当我尝试以下代码时
我从编译器得到一个错误“右值引用不能绑定到左值”
到底是怎么回事?我很混乱。
c++ - 仅使用类型信息而不是对象信息返回调用类型
考虑以下代码:
有没有办法在所有情况下都type2
一样,但只使用表达式中的类型,或者换句话说,只使用and而不是and ?type1
decltype
F
Args
f
args