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

时间:2018-11-17 12:23:14

标签: c++ initialization rvalue-reference stdarray

我试图用初始化列表初始化一个类成员const std::array引用:

class Foo {
    const std::array<const int&, 3> &bar;
    Foo() : bar({ 1, 2, 3 }) {}
}

但貌似

  

无法使用带括号的初始化程序列表初始化引用类型'const std :: array&'

问:有没有一种方法可以初始化带有右值的const std::array引用成员?

1 个答案:

答案 0 :(得分:0)

从对问题的评论中我可以得出结论,我没有意识到两件事:

  • const引用成员与const引用非成员不同,因为它们不会延长临时值的寿命。
  • 可以在构造函数中使用花括号(在适用的情况下,例如数组)初始化类成员。

作为附加说明,包含std::array的成员T&可能导致以下情况:

  •   

    警告:“ Foo”具有虚拟功能,但非虚拟析构函数

  •   

    错误:形成指向引用类型'std :: array :: value_type {aka const int&}'的指针

在两种情况下,我都不完全知道发生了什么,但是那将是单独的问题。