C++ g+的差异+;STL容器初始值设定项\u列出4.4和4.7之间的行为

C++ g+的差异+;STL容器初始值设定项\u列出4.4和4.7之间的行为,c++,stl,c++11,initializer-list,C++,Stl,C++11,Initializer List,下面的c++0x/c++11功能(初始值设定项列表,包括STL容器)应该允许我在声明时初始化此STLstd::map。而且,它在g++4.7.2中工作得很好,但是我在g++4.4.6中编译它时遇到了一个错误。根据GCC文档,这个c++0x特性在4.4中是可用的,但是很明显,(a)我做错了什么,或者(b)它在g++4.4中是不完整的 std::map<std::string,std::vector<std::string>> DbConnection::attrs_of_t

下面的c++0x/c++11功能(初始值设定项列表,包括STL容器)应该允许我在声明时初始化此STL
std::map
。而且,它在g++4.7.2中工作得很好,但是我在g++4.4.6中编译它时遇到了一个错误。根据GCC文档,这个c++0x特性在4.4中是可用的,但是很明显,(a)我做错了什么,或者(b)它在g++4.4中是不完整的

std::map<std::string,std::vector<std::string>>
DbConnection::attrs_of_type = {
    { "http",           { "url", "ipaddress", "port",
                            "username", "password" } },
    { "email",          { "address", "full_name" } },
    { "ftp",            { "hostname", "ipaddress", "port",
                            "username", "password", "filename" } }
};
(是否可以更改粘贴的格式,从而不需要太多的水平滚动?)


无论如何。在这一点上,我试图弄清楚我必须做什么不同的事情才能使这个初始化在g++4.4.6中工作。关于我声明
std::map
std::vector
的方式,是否有什么可以改变的地方可以解决问题?或者,由于g++4.4中此c++11功能的实现不同和/或不完整,必须使用完全不同的方法吗?

您的代码是正确的。g++-4.4正式支持初始值设定项列表。但是我记得(我关注wg21论文)有一个问题,特别是在某个时候不能像您在Committee中所做的那样初始化容器(嵌套)


很可能g++-4.4不完全支持
std::initializer\u list
语法,这是因为后来做了这些更改。

问一个明显的问题:您是在g++4.4中使用
-std=c++0x
编译的,对吗?
database.cc:164: error: no matching function for call to ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >::map(<brace-enclosed initializer list>)’
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_map.h:195: note: candidates are: std::map<_Key, _Tp, _Compare, _Alloc>::map(std::initializer_list<std::pair<const _Key, _Tp> >, const _Compare&, const _Alloc&) [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_map.h:181: note:                 std::map<_Key, _Tp, _Compare, _Alloc>::map(std::map<_Key, _Tp, _Compare, _Alloc>&&) [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_map.h:170: note:                 std::map<_Key, _Tp, _Compare, _Alloc>::map(const std::map<_Key, _Tp, _Compare, _Alloc>&) [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_map.h:150: note:                 std::map<_Key, _Tp, _Compare, _Alloc>::map() [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]