代码之家  ›  专栏  ›  技术社区  ›  Nick Heiner

C++:结构初始化与映射

  •  1
  • Nick Heiner  · 技术社区  · 14 年前

    这很好:

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    struct Bar
    {
        int i;
        int f;
    };
    
    int main()
        {
            map<int, Bar> m;
    
        Bar b;
        b.i = 1;
        b.f = 2;
        m[0] = b;
    }
    

    但如果我想让它更简洁一点,我会犯错误:

    int main()
    {
        map<int, Bar> m;
    
        m[0] = {1, 2};
    }
    

    3 回复  |  直到 14 年前
        1
  •  6
  •   Loki Astari    14 年前

    可以添加构造函数:
    在这种情况下,我想说它比花哨的新初始值设定项更好,因为它实际上让维护人员不必去寻找它,就可以看到映射中放的是什么类型。

    struct Bar
    {
        Bar(int anI,int aJ)
          :i(anI), j(aJ)
        {}
        int i;
        int j;
    }
    
    .....
    
    m[0] = Bar(1,2);
    
        2
  •  3
  •   Klaim    14 年前

    不。

    不符合现行标准(C++ 03)。

    但是如果你使用的编译器 new initialization syntax of C++0x like a recent version of gcc

        3
  •  0
  •   user318904    14 年前

    对我来说很好。

    使用:

    后一种语法抛出警告,但仍在编译,显然这是c++0x语法:

    警告:扩展初始值设定项列表仅适用于-std=c++0x或-std=gnu++0x