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;如何解决这个问题
答案 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
。