当前位置: 首页 > 知识库问答 >
问题:

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

杜茂
2023-03-14

我试图用初始值设定项列表初始化类成员const std::array引用:

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

但显然

无法初始化引用类型“const std::array”

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

共有1个答案

苏鸿卓
2023-03-14

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

  • 引用成员与引用非成员不同,因为它们不会延长临时值的寿命

作为附加说明,成员std::array包含T

>

  • <块引用>

    警告:'Foo'具有虚拟函数但非虚拟析构函数

    错误:形成指向引用类型“std::array::value\u type{aka const int”的指针

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

  •  类似资料:
    • 问题内容: 我最近刚与Python中的一个错误作斗争。那是那些愚蠢的新手错误之一,但是它让我思考了Python的机制(我是C ++的老程序员,是Python的新手)。我将列出错误的代码并解释如何解决该问题,然后我有两个问题。 场景:我有一个叫做A的类,它有一个字典数据成员,下面是其代码(当然这是简化的): 使用此代码的类为B类: 请注意,每次调用都会初始化类A的新“干净”实例,并在添加前后打印字典

    • 考虑以下C 11代码: 这会产生一个错误: 我明白为什么,但我正试图从标准中的语言来证明这一点。 意译C 11 N34858.5.3.5: int的引用由int类型的表达式初始化,如下所示:(yes) 如果引用是右值引用:(是) 如果初始值设定项表达式:(是) 是xvalue、类prvalue、数组prvalue还是函数左值(否?),或 这两点都不适用吗?所以我们应该假设它是不正确的,因为两者都不

    • 问题内容: 是否可以在python中使用全1来初始化切片? 蟒蛇: 高朗 有可能做得更好吗? 问题答案: 是的,但是您必须使用其他语法。 它被称为“复合文字” 另外,如果有理由进行迭代(如计算基于循环变量的值等),则可以使用关键字而不是旧式,因为i等于i,小于i ++循环。

    • 此代码编译: 该代码不: 报告的错误(在 MSVC、gcc 和 clang 中)表明他们认为 构造函数未定义或不是 ,例如。从叮叮当当: 为什么? (可能与这个问题有关,但在使用时应该是完整的;只有仍然不完整。

    • 本文向大家介绍Visual Basic .NET成员初始化,包括了Visual Basic .NET成员初始化的使用技巧和注意事项,需要的朋友参考一下 示例 每个枚举成员可以用一个值初始化。如果未为成员指定值,则默认情况下将其初始化为0(如果它是成员列表中的第一个成员),或者初始化为比前一个成员的值大1的值。            

    • 在C++98标准里,只有static const声明的整型成员能在类内部初始化,并且初始化值必须是常量表达式。这些限制确保了初始化操作可以在编译时期进行。例如: int var = 7; class X { static const int m1 = 7; // 正确 const int m2 = 7; // 错误:无static static int m3 =