gpt4 book ai didi

c++ - 是否有某种功能,指针取消引用给出右值?

转载 作者:行者123 更新时间:2023-11-30 03:27:06 26 4
gpt4 key购买 nike

是否有某种功能,其中指针解引用给出右值?

所以,一个通常的指针给出一个左值:

Foo *p = ...;

fn(p[42]); // p[42] is an lvalue

我想让 p[42] 返回一个右值,所以 fn(Foo &&) 可以为 fn(p[42 ]):

<some_pointer_type> p = ...;

fn(p[42]); // I'd like to have p[42] be an rvalue, so an fn(Foo &&) would be called

注意:我想让 p 有这个功能,指针类型 应该有这个信息,取消引用它应该给出一个右值。

最佳答案

通过std::move(),您可以无条件转换为右值

fn(std::move(p[42]));

名称 move 在这里实际上具有误导性:没有移动任何东西,但正在执行转换。


然后考虑编写一个指针模板 Ptr,其运算符 *[] 被重载以返回一个右值:

#include <utility>

class Foo {};

template<typename T>
class Ptr {
public:
Ptr(T* ptr): ptr_{ptr} {}
T&& operator*() { return std::move(*ptr_); }
T&& operator[](int idx) { return std::move(*(ptr_ + idx)); }
private:
T* ptr_;
};

void fn(Foo&& x) { return; }
void fn(const Foo& x) { return; }

int main()
{
Foo foo[50];
Ptr<Foo> p{&foo[0]};

// call void fn(Foo&&)
fn(p[42]);
}

关于c++ - 是否有某种功能,指针取消引用给出右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47651203/

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