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
我不能完全理解这个警告以及如何解决这个问题
最佳答案
你的 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 中, vector 有一个构造函数,它接受一个初始化列表参数。您也可以将其包含在您自己的类(class)中。请注意,后者通常等同于以下内容:
std::vector<int> v ({1,2,3,4,5});
这有助于说明初始化列表现在是实际类型这一点。
如果您想查看 Stroustrup 的简介,我会为您指出他的 C++11 FAQ .
关于c++ - 构造函数中的以下代码会生成警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457648/