带有相关字段的结构的聚合初始化

时间:2019-01-11 01:24:41

标签: c++ language-lawyer

执行以下操作合法吗?

#include <iostream>

struct Foo
{
    int bar;
    int baz;
};

int main()
{
    Foo instance = { 5, instance.bar };
    std::cout << instance.baz << std::endl;
}

我认为不是因为据我所知初始化顺序未指定,并且bar字段可以在baz之后初始化。

我对吗?

https://coliru.stacked-crooked.com/a/ea97713515dd0687

1 个答案:

答案 0 :(得分:2)

如果您喜欢自己的难题,那真的会烤面条:

#include <iostream>

struct Foo
{
    int bar=0;
    int baz=1;
};

const int cool(const Foo& f) 
{
    std::cout << "Bar: " << f.bar << " Baz: " << f.baz << std::endl;
    return f.bar;
}

int main()
{
    Foo instance = { 5, cool(instance) };
    std::cout << instance.baz << std::endl;
}

以前的海报正确引用了什么:c++ std draft doc

  

...与给定元素关联的所有值计算和副作用均按顺序排列在其后的任何元素之前。