gpt4 book ai didi

c++ - 通过 r 值引用接收后通过引用传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:50 24 4
gpt4 key购买 nike

我有一个类 Foo

我想要一个函数 TakeFoo,它接受一个 Foo 对象并调用它的方法。这就是我的开头:

void TakeFoo (const Foo&);

但是,我还需要能够对其调用非常量方法。所以我把它改成这样:

void TakeFoo (Foo&);

但是,当我尝试向它传递一个临时变量时,这会导致警告。所以我创建了一个重载:

void TakeFoo (Foo&&);

但是,我想重用代码,所以 TakeFoo(Foo&&) 基本上是这样做的:

void TakeFoo (Foo&& FooBar)
{
TakeFoo(FooBar);
}

为什么这也不会引起警告,因为我仍在对临时对象进行非常量引用?

最佳答案

Why is this not causing a warning as well, because I am still taking a non-const reference to a temporary?

它不会引起警告,因为 FooBar 是一个左值。

虽然它绑定(bind)的对象是临时对象,而且虽然FooBar类型 是“对Foo 的右值引用”,命名变量的 value categorylvalue - 给一些东西一个名字允许它在你的程序中被重复引用(这或多或少是左值的意思模型)。

由于左值引用可以绑定(bind)到标准 C++ 中的左值,因此您不会收到来自编译器的任何警告。

关于c++ - 通过 r 值引用接收后通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com