gpt4 book ai didi

c++ - 使用 auto vs const auto& 临时保留方法调用的结果

转载 作者:行者123 更新时间:2023-12-02 09:47:44 35 4
gpt4 key购买 nike

假设我有

class Container {
public:
T getValue() const { return t; }
const T& getCRef() const { return t; }
private:
const T t;
};

void f(const T& arg) { ... }
在函数内临时绑定(bind)返回值的首选方法是什么?例如。我应该更喜欢什么,为什么?
void method(const Container& c) {
auto t1 = c.getValue();
auto t2 = c.getCRef();
const auto& t3 = c.getValue();
const auto& t4 = c.getCRef();

// Notes from discussion:
// 1. Neither Container not object T changes during execution
// 2. I don't need to modify T, just passing it through

f(t1);
f(t2);
f(t3);
f(t4);
}
我的理解是:
  • t1 将受益于复制省略并将导致一个复制构造
  • t2 也将导致一个拷贝构造
  • t3 仍然会导致返回的临时复制构造,然后由 const 引用
  • 绑定(bind)
  • t4 应该没有拷贝

  • 那是对的吗?如果是这样,我应该更喜欢 const auto&吗?超过 auto一直在处理这种情况?另外,我应该更喜欢 getCRef()接口(interface)超过 getValue()我什么时候可以保证引用与底层对象一样长?

    最佳答案

    Is that correct?


    是的。

    If so, should I prefer const auto& over auto for such cases all the time?


    这取决于你打算做什么。
    如果你想要一个拷贝,那么使用一个对象变量。如果要引用存储在其他地方的对象,请使用引用变量。

    Also, should I prefer getCRef() interface over getValue() when I can guarantee that reference lives as long as underlying object does?


    和上面一样。

    my intention is to pass unmodified result of one method call to another


    let's assume that object doesn't change for the duration


    如果 T是微不足道的,然后更喜欢对象以避免不必要的间接。如果 T是不平凡的,然后更喜欢引用以避免复制。如果您不知道 T是微不足道的,然后假设它不是。

    关于c++ - 使用 auto vs const auto& 临时保留方法调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64015235/

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