首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >auto与auto&用于函数返回值

auto与auto&用于函数返回值
EN

Stack Overflow用户
提问于 2016-10-31 07:42:25
回答 1查看 964关注 0票数 5

请您告诉我,我是否正确地认为,使用auto &对于函数,返回值总是比使用auto更好的选择。例如,在

代码语言:javascript
运行
复制
auto val = someObj.getVal();

如果getVal()返回引用,则val将是一个副本。然而,使用通用参考汽车&&有没有这样的缺点呢?我需要知道的唯一信息是getVal()是否是const。

EN

回答 1

Stack Overflow用户

发布于 2016-10-31 08:37:10

然而,使用通用参考汽车&&有没有这样的缺点呢?

不,它不会复制返回值。

问题所在

但是,有时复制是必要的,对auto&&和引用都使用prvalue可以创建悬空引用。考虑这一情况:

代码语言:javascript
运行
复制
struct A {
    // A: Another programmer changed it from:
    // int getVal() { return mInteger; }

    // B
    int &getVal() { return mInteger; }

private:
    int mInteger;
};

int main() {
    A *a = new A;

    auto   integerCopy = a->getVal();

    // int& on case B, int&& on case A.
    auto&& integerRvalueRef  = a->getVal();

    delete a;

    // Ok, no matter what getVal returns.
    std::cout << integerCopy;
    // Dangling Reference dereference if getVal returns a reference. 
    std::cout << integerRvalueRef;
}

正如您所看到的,在auto中,更改此返回值没有问题。但是,使用auto&&,它创建了一个悬空引用。

结论

像使用常规引用一样使用auto&&:谨慎对待它。将其同时用于prvalue和引用值返回值可能会带来糟糕的惊喜。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40338200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档