gpt4 book ai didi

c++ - 右值或左值 (const) 引用参数

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

我想通过 r- 或 l- 值 (const) 引用将参数(某种具体类型,比如 int)传递给成员函数。我的解决方案是:

#include <type_traits>
#include <utility>

struct F
{
using desired_parameter_type = int;

template< typename X, typename = typename std::enable_if< std::is_same< typename std::decay< X >::type, desired_parameter_type >::value >::type >
void operator () (X && x) const
{
// or even static_assert(std::is_same< typename std::decay< X >::type, desired_parameter_type >::value, "");
std::forward< X >(x); // something useful
}
};

另一个例子在这里http://pastebin.com/9kgHmsVC .

但是它太冗长了。如何以更简单的方式做到这一点?

也许我应该使用 std::remove_referencestd::remove_const 的叠加而不是 std::decay,但是有这里只是一个简化。

最佳答案

如果我对你的问题的理解正确,你希望有一个函数,其参数要么是右值引用(如果提供了右值),要么是对 const 的左值引用(如果是左值提供)。

但是这个函数会做什么呢?好吧,因为它必须能够处理这两种情况,包括提供左值的情况,所以它不能修改其输入(至少不能修改绑定(bind)到 x 参数的输入)- 如果可以,它会违反 const 引用的语义。

但是话又说回来,如果它不能改变参数的状态,就没有理由允许右值引用:而是让 x 成为 const 的左值引用> 所有的时间。 const 的左值引用可以绑定(bind)到右值,因此您可以同时传递右值和左值。

如果函数的语义根据传递的内容而不同,那么我会说编写两个这样的函数更有意义:一个接受右值引用,一个接受左值引用 const

关于c++ - 右值或左值 (const) 引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376557/

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