没有默认构造函数的 C++ 成员数组初始化

标签 c++ clang array-initialization

我有一个没有默认构造函数的类 Thing

现在我们定义另一个类,它现在必须立即初始化数组元素,因为没有默认构造函数,就不能进行后期赋值。所以我们有:

class TwoThings
{
    public:

    Thing things[2];

    TwoThings() : things({Thing("thing 1"),Thing("thing 2")})
    {
    }
}

这是正确的方法吗?

GCC 可以很好地编译它,而 Clang 不能,声明应该使用“初始化列表”。我尝试了几种替代方法,例如双括号 {{ ... }} 等,但无法设法获得 Clang 的编译等价物。

如何在 Clang 中初始化没有默认构造函数的数组?

最佳答案

是的,括号中的成员数组初始化是 GCC 扩展。为了使其成为标准,您可以只使用一组大括号(需要 C++11):

TwoThings() : things{Thing("thing 1"),Thing("thing 2")}
{
}

如果你不能使用 C++11,你可能想使用不同的存储方法,比如 std::pair<Thing,Thing>std::vector<Thing> .

关于没有默认构造函数的 C++ 成员数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743745/

相关文章:

c++ - 具有 map<value, key> 和原子操作的 CUDA

c++ - 关于C++类定义的问题 ": 1"

c++ - 当大小是变量而不是常量时如何创建数组?

c - gcc 编译器报告警告,但 a.out 工作顺利,否则

c++ - 这个递归函数在 C++ 中是如何工作的?

c++ - 我可以将 enable_if 之类的东西与隐式转换运算符一起使用吗?

c++ - 可变参数模板和函数的指针 : what compiler is right?

c++ - C++中的评估顺序初始化数组

c++ - 从txt文件输入到数组

c - __restrict vis-a-vis 流行编译器的函数优化行为