gpt4 book ai didi

c++ - 指向右值的指针

转载 作者:行者123 更新时间:2023-11-27 23:25:52 25 4
gpt4 key购买 nike

在寻找调用同时接受左值和右值引用的函数的解决方案时,我编写了以下代码(不,我保证我再也不会这样做了)。

目标是提供一个既接受左值引用又接受右值引用的函数,我不想编写两个函数或真正关心调用方的左值/右值。因此,我考虑提供一些包装参数的宏/函数,以便无论它是左值还是右值都可以传递 - 在本例中为 get_addr。

在任何情况下我都不想更改传递给函数的数据。

template<typename T>
std::shared_ptr<T> get_addr(T t) {
std::shared_ptr<T> p(new T(t));
return p;
}

int get_value(int x){
return x * 2;
}

void print_value(int* p){
cout << *p << endl;
}

int main() {
print_value(get_addr(get_value(42)).get());
}

虽然该代码对我来说工作正常,但我怀疑它是否安全。我的猜测:在从 shared_ptr 调用 get() 之后,get_value() 的结果不再是必需的并且可能被忽略。因此,print_value 可能会收到无效引用。那有意义吗?无论如何,我不喜欢我提供的代码。我使用临时变量解决了这个问题。

尽管如此,我仍然很好奇是否有更好的解决方案来解决这个问题。从语法的角度来看,我最好只接受一个接受左值/右值的函数“void print_value(int&& p)”。我研究了移动语义、左值/右值转换,但没有找到真正看起来不错的解决方案。

最佳答案

In no case I would want to change data passed to the function.

这有什么问题吗?

void print_value(int p){
cout << p << endl;
}

或者下面的,如果你不想复制一些昂贵的类型。

void print_value(T const& p){
cout << p << endl;
}

关于c++ - 指向右值的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9584546/

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