簡體   English   中英

C ++:結構初始化和映射

[英]C++: Struct initialization and maps

這工作正常:

#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};
}

有什么方法可以使該結構初始化語法起作用? 我做錯了嗎,還是地圖禁止使用?

您可以添加一個構造函數:
在這種情況下,我會說它比花哨的新初始化程序好,因為它實際上可以讓維護者查看映射中正在放置的類型,而不必去尋找它。

struct Bar
{
    Bar(int anI,int aJ)
      :i(anI), j(aJ)
    {}
    int i;
    int j;
}

.....

m[0] = Bar(1,2);

沒有。

不適用於當前標准(C ++ 03)。

但是,如果您使用的編譯器實現了C ++ 0x新初始化語法例如gcc的最新版本 ),則可以這樣做。

對我來說很好。

使用:gcc版本4.4.4 20100503(Red Hat 4.4.4-2)(GCC)

后一種語法會發出警告,但仍會編譯,顯然這是c ++ 0x語法:

警告:擴展的初始化程序列表僅適用於-std = c ++ 0x或-std = gnu ++ 0x

添加該開關和-Wall編譯正常。 也許升級您的編譯器?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM