代码之家  ›  专栏  ›  技术社区  ›  FrozenHeart

具有依赖字段的结构的聚合初始化[重复]

  •  2
  • FrozenHeart  · 技术社区  · 5 年前

    进行以下操作是否合法?

    #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 回复  |  直到 5 年前
        1
  •  2
  •   AndreasT    5 年前

    如果你喜欢你的难题,这真的会烤你的面条:

    #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

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