C++花括号部分初始化

3

这个初始化方法是否符合标准?它会创建一个空的vector,以便我稍后可以推入数据(vector<Pair<float,string>>)吗?

struct A
{
    int a;
    int b;
    vector<vector<Pair<float, string> > > c;
};

A obj = {1, 2};

是的。A是一个聚合体,所以obj.a被初始化为1obj.b被初始化为2,而obj.c{}初始化 - 即值初始化。 - T.C.
“A” 是聚合体是什么意思?“A” 是一个结构体。 - Narek
http://en.cppreference.com/w/cpp/language/aggregate_initialization - T.C.
这在很长一段时间内就是被允许的,这对于C++11来说并不是新鲜事。 - CashCow
1
不是那个问题的副本。 - CashCow
1个回答

4

如果未定义Pair,可以将其更改为std::pair(#include <utility>)。 在下面的修正程序中允许部分初始化,它输出1、2、0,因为c也被初始化为一个无元素向量。

struct A
{
    int a;
    int b;
    vector<vector<std::pair<float, string> > > c;
};

A obj = {1, 2};

int main()
{
    cout << obj.a << ", " << obj.b << ", " << obj.c.size() << endl;
    return 0;
}

@DavidHeffernan,我同意。std::pair只是一个建议,也许Pair已经在其他地方定义过了,如果没有,那么可以使用std::pair。 - Dr. Debasish Jana
@DavidHeffernan 编辑了我的答案,将其改为“可以”而不是“应该”。 :-) - Dr. Debasish Jana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接