4
    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

我不能完全理解这个警告以及如何解决这个问题

4

2 回答 2

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

于 2012-05-05T00:15:15.927 回答
2

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

pthread_mutex_init(&mutex_map[key], NULL);

而不是使用PTHREAD_MUTEX_INITIALIZER.

于 2015-04-10T09:19:49.217 回答