[英]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);
對我來說很好。
使用: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.