列表初始化编译错误

时间:2012-02-06 10:10:47

标签: c++ c++11

c ++ 11标准8.5.4列表初始化示例说:

std::map<std::string,int> anim = { {"bear",4}, {"cassowary",2}, {"tiger",7} };

但我已经尝试过VC10,gcc 4.6和Comeau,那些编译器都不会让这个通过?那是为什么?

1 个答案:

答案 0 :(得分:3)

感谢评论中的所有答案。

然后我检查了c ++ 98和03标准,是的,8.5.4肯定是c ++ 11中的新的第二个! 这就是为什么它没有得到所有编译器的完全支持。

使用gcc 4.6.1添加标志-std = c ++ 0x后,编译正常。

为可能需要引用的任何内容添加测试代码:

#include <map>
#include <string>
#include <initializer_list>
#include <iostream>

using namespace std;
int main() 
{
    std::map<std::string,int> collection = {{"bear",4}, {"cassowary",2}, {"tiger",7}};
    for(auto it: collection)
        std::cout << it.first << " has value " << it.second << std::endl;
    return 0;
}