gpt4 book ai didi

c++ - 为什么 std::not1() 通过 const 引用而不是值来获取参数?

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

std::not1() 原型(prototype)如下:

template< class Predicate >
std::unary_negate<Predicate> not1(const Predicate& pred);

这有效地禁止了移动语义。为什么它的原型(prototype)不是:

template< class Predicate >
std::unary_negate<Predicate> not1(Predicate pred);

这样,复制或移动取决于 pred 的构造方式。然后该函数只是将 pred 移动到构造的 std::unary_negate 对象。

最佳答案

单独进行更改是完全没有用的。什么not1是构造一个 std::unary_negate<Predicate>使用 pred作为构造函数的参数。但是std::unary_negate<Predicate>的唯一相关构造函数|需要 const Predicate & , 不是 Predicate && .

合乎逻辑的后续问题是,为什么不 std::unary_negate<Predicate>有一个构造函数取 Predicate && ?它在设计时显然不可能采用这样的论点,因为右值引用当时还不存在。至于后面,这是一个猜测,但我想说 lambda 已经很好地满足了需求,所以 unary_negate 没有太大意义。除了向后兼容性之外,不再有任何问题。

关于c++ - 为什么 std::not1() 通过 const 引用而不是值来获取参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548604/

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