右值引用可以作为const引用传递吗?

赫尔普·德灵顿

考虑以下示例struct

struct A {
    int i;

    void init(const A &a)
    {
        this->i = a.i;
    }

    A(int i)
    {
        this->i = i;
    }

    A(const A &a) = delete;
    A &operator=(const A &a) = delete;

    A(A &&a)
    {
        init(a); // Is this allowed?
    }

    A &operator=(A &&a)
    {
        init(a); // Is this allowed?
        return *this;
    }
};

右值引用A &&a被传递到接受a的函数const A &a,即恒定的左值引用。是否允许这样做并导致C ++中行为明确?

格扎

是的,允许。

请注意,a即使a的声明类型是rvalue引用表达式的值类别也是lvalue

此外,如果您通过awith创建一个右值std::move,则您的代码仍会格式正确,因为右值可以绑定到const左值引用:

init(std::move(a)); // std::move(a) is an rvalue (to be precise, xvalue), but still OK

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift 枚举可以作为变量引用吗?

来自分类Dev

传递输入参数作为右值引用?

来自分类Dev

可以使用右值初始化 const std::array 成员引用吗?

来自分类Dev

我们可以使用右值引用来“传递”参数吗?

来自分类Dev

Lambda闭包左值可以作为右值参考参数传递

来自分类Dev

返回作为参数传递给函数的右值引用

来自分类Dev

名称对象可以作为PDF文件中的间接引用吗?

来自分类Dev

我可以从引用传递的参数返回值中声明const int吗?

来自分类Dev

为什么右值引用作为左值引用传递?

来自分类Dev

Haskell内联函数可以作为参数传递吗?

来自分类Dev

通过引用,常量引用,右值引用还是常量右值引用传递?

来自分类Dev

引用const char的右值的重载解析*

来自分类Dev

const引用如何绑定到右值

来自分类Dev

右值引用作为对象字段

来自分类Dev

将const引用绑定到右值引用

来自分类Dev

在函数之间传递右值引用

来自分类Dev

c ++将单个变量作为引用和const引用传递

来自分类Dev

为什么添加const将通用引用作为右值

来自分类Dev

引用传递也可以称为指针传递吗?

来自分类Dev

在构造函数中传递const引用时,如何强制编译器不接受右值

来自分类Dev

引用是从函数右值返回的吗?

来自分类Dev

这里应该使用右值引用吗?

来自分类Dev

我可以知道输入扩充是引用(&) 还是右值引用(&&)?

来自分类Dev

为什么我可以在C ++中使用for循环将右值绑定到非const引用?

来自分类Dev

可以在带有右值引用的函数中直接使用具有左值引用的函数吗?

来自分类Dev

成员函数可以返回对右值对象的可修改左值引用吗?

来自分类Dev

左值和右值引用可以合二为一吗?

来自分类Dev

const引用的地址可以与被引用对象的地址不同吗?

来自分类Dev

右值引用引用的内存

Related 相关文章

  1. 1

    Swift 枚举可以作为变量引用吗?

  2. 2

    传递输入参数作为右值引用?

  3. 3

    可以使用右值初始化 const std::array 成员引用吗?

  4. 4

    我们可以使用右值引用来“传递”参数吗?

  5. 5

    Lambda闭包左值可以作为右值参考参数传递

  6. 6

    返回作为参数传递给函数的右值引用

  7. 7

    名称对象可以作为PDF文件中的间接引用吗?

  8. 8

    我可以从引用传递的参数返回值中声明const int吗?

  9. 9

    为什么右值引用作为左值引用传递?

  10. 10

    Haskell内联函数可以作为参数传递吗?

  11. 11

    通过引用,常量引用,右值引用还是常量右值引用传递?

  12. 12

    引用const char的右值的重载解析*

  13. 13

    const引用如何绑定到右值

  14. 14

    右值引用作为对象字段

  15. 15

    将const引用绑定到右值引用

  16. 16

    在函数之间传递右值引用

  17. 17

    c ++将单个变量作为引用和const引用传递

  18. 18

    为什么添加const将通用引用作为右值

  19. 19

    引用传递也可以称为指针传递吗?

  20. 20

    在构造函数中传递const引用时,如何强制编译器不接受右值

  21. 21

    引用是从函数右值返回的吗?

  22. 22

    这里应该使用右值引用吗?

  23. 23

    我可以知道输入扩充是引用(&) 还是右值引用(&&)?

  24. 24

    为什么我可以在C ++中使用for循环将右值绑定到非const引用?

  25. 25

    可以在带有右值引用的函数中直接使用具有左值引用的函数吗?

  26. 26

    成员函数可以返回对右值对象的可修改左值引用吗?

  27. 27

    左值和右值引用可以合二为一吗?

  28. 28

    const引用的地址可以与被引用对象的地址不同吗?

  29. 29

    右值引用引用的内存

热门标签

归档