如何强制编译器使用聚合初始化而不是构造函数

黑猫

考虑以下示例:

#include <iostream>

struct Test
{
    int a, b;

    Test(int, int)
    {
        a = b = 0;
    }
};

int main() {
    Test v {1, 1};
    std::cout << v.a << ' ' << v.b << '\n';
    return 0;
}

在此{1, 1}调用Test(int, int)构造函数,因此输出为0 0

是否可以强制编译器聚合初始化,v以便输出是1 1

此时,我使用单独的方法直接初始化fileds,例如:

struct Test
{
    ...
    static Test NewTest(int x, int y)
    {
        Test ret;
        ret.a = x;
        ret.b = y;
        return ret;
    }
}

但是我想知道是否有更好的方法可以做到这一点。

0x499602D2

聚合初始化要求类型为聚合。使用用户声明的构造函数会使该类型成为非聚合类型,因此这是不可能的。如果删除构造函数,则您的类型将成为聚合,并且将发生聚合初始化。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何指示MS Visual C ++编译器使用未初始化的__m512i寄存器

为什么C#编译器强制在构造函数中显式初始化所有值类型的字段?

“没有匹配的初始化构造函数” Rad Studio 10 Clang编译器

如何强制编译器为未初始化的变量设置非零值?

使用参数化构造函数初始化类成员-编译器认为我正在声明一个函数?

为什么零初始化不是c ++中未初始化变量的默认值?有编译器选项可以强制执行吗?

聚合初始化绕过私有类构造函数

聚合初始化不支持构造函数访问

为什么在尝试使用C ++ 11样式初始化对象数组时编译器隐式删除构造函数

Visual Studio编译器错误:对委托构造函数的调用应是唯一的成员初始化程序

编译器没有发现构造函数初始化期间传递的实例变量和参数之间存在歧义?

使用具有非强制值的构造函数初始化类

右值数据成员初始化:聚合初始化与构造函数

如何访问初始化函数中不是成员变量的构造函数参数?

如何避免使用大向量初始化的“编译器限制:编译器堆栈溢出”?

聚合字段构造函数必须是公共的才能在 C++ 中使用聚合初始化吗?

C 编译器如何处理使用未初始化的变量?

如何使用编译器生成的后备字段初始化结构

使用块而不是构造函数参数来初始化对象

使用externs和目标JavaScript时,如何强制Haxe编译器使用require语句?

如何使用嵌套初始化构造函数中的1d向量初始化矩阵?

编译器错误,因为构造函数必须显式初始化成员

如何强制JRuby使用Java Longs而不是Fixnums初始化Java ArrayList?

是否可以在构造函数体内而不是初始化列表中初始化成员变量?

如何强制编译器使用ldc.i8 IL指令而不是ldc.i4加conv.i8?

是否可以强制Fortran编译器使用单精度?

为什么编译器报告“可能在此函数中未初始化使用”?

如何使用将使用相同构造函数的相同元素初始化引用类型的列表?

为什么Java编译器在第一个语句super()之后在构造函数中复制实例初始化程序块?