以下代码在构造函数中生成警告

时间:2012-05-05 00:11:01

标签: c++ stl map constructor

    mutex_map[key] = PTHREAD_MUTEX_INITIALIZER;

mutex_map属于以下类型:

    static std::map<std::string, pthread_mutex_t> mutex_map;

在全球范围内的同一文件中

我收到关于普通c ++的警告

    warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x

我完全不能理解这个警告&amp;如何解决这个问题

2 个答案:

答案 0 :(得分:4)

您的PTHREAD_MUTEX_INITIALIZER在某种程度上与初始化列表相同。

在C ++ 03中,您可以像这样初始化数组:

int arr[5] = {1,2,3,4,5};

注意初始化列表。但是,没有类支持这样做。

在C ++ 11中,他们添加了std::initializer_list<T>,因此这种语法是可行的。请考虑以下事项:

std::vector<int> v = {1,2,3,4,5};

或者,更简单:

std::vector<int> v{1,2,3,4,5};

这将适用于C ++ 11,但不适用于C ++ 03,因为在C ++ 11中,向量具有一个构造函数,该构造函数接受初始化列表参数。您也可以将它包含在自己的类中。请注意,后者与正常情况相同:

std::vector<int> v ({1,2,3,4,5});

这有助于说明初始化列表现在是实际类型。

如果您想看Stroustrup的模糊,我会指向他C++11 FAQ

答案 1 :(得分:2)

对于以下解决方案:您需要致电

pthread_mutex_init(&mutex_map[key], NULL);

而不是使用PTHREAD_MUTEX_INITIALIZER