C++ C++;:结构初始化和映射
这很好:C++ C++;:结构初始化和映射,c++,syntax,C++,Syntax,这很好: #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; } #包括 #包括 使用名称空间std; 结构条 { int i; i
#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;
}
#包括
#包括
使用名称空间std;
结构条
{
int i;
int f;
};
int main()
{
地图m;
b栏;
b、 i=1;
b、 f=2;
m[0]=b;
}
但如果我想让它更简洁一点,我会犯错误:
int main()
{
map<int, Bar> m;
m[0] = {1, 2};
}
intmain()
{
地图m;
m[0]={1,2};
}
有没有办法让结构初始化语法正常工作?我这样做是不对的,还是地图禁止这样做?否
不适用于当前标准(C++03)
但是,如果您使用的编译器实现了(),则允许它这样做。否
不适用于当前标准(C++03)
但是,如果您使用的编译器实现了(),则允许它这样做。您可以添加构造函数:
在这种情况下,我会说它比花哨的新初始值设定项更好,因为它实际上让维护人员不必去寻找它,就可以看到地图中放的是什么类型
struct Bar
{
Bar(int anI,int aJ)
:i(anI), j(aJ)
{}
int i;
int j;
}
.....
m[0] = Bar(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(红帽4.4.4-2)(gcc)
后一种语法抛出警告,但仍在编译,显然这是c++0x语法:
警告:扩展初始值设定项列表仅适用于-std=c++0x或-std=gnu++0x
加上那个开关和墙就可以了。也许可以升级你的编译器?对我来说很好
使用:
gcc版本4.4.4 20100503(红帽4.4.4-2)(gcc)
后一种语法抛出警告,但仍在编译,显然这是c++0x语法:
警告:扩展初始值设定项列表仅适用于-std=c++0x或-std=gnu++0x
加上那个开关和墙就可以了。也许可以升级您的编译器?+1。下一个标准甚至允许
映射m{{0,{1,2}}代码>约翰内斯>甚至没有考虑过这种可能性,谢谢。我们将进入初始化游行:D+1。下一个标准甚至允许映射m{{0,{1,2}}代码>约翰内斯>甚至没有考虑过这种可能性,谢谢。我们将进入初始化游行:D