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

Can const std::array member reference be initialized with an rvalue?

我正在尝试使用初始化列表初始化 class 成员 const std::array 引用:

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

但显然

cannot initialize reference type 'const std::array &' with a parenthesized initializer list

问:有没有办法用右值初始化 const std::array 引用成员?

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

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

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

  • warning: 'Foo' has virtual functions but non-virtual destructor

  • error: forming pointer to reference type 'std::array::value_type {aka const int&}'

在这两种情况下,我不完全确定发生了什么,但这些将是不同的问题。