c++ - 构造函数中的以下代码会生成警告

标签 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

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

最佳答案

你的 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/

相关文章:

c++ - 不同线程间的互斥锁同步

c# - 所有音频频率

c++ - 可以在一个文件中定义两个 `istream_iterator` 吗?

javascript - 用鼠标悬停创建 map 的最佳方法是什么?

java - Java中的有序列表映射实现

c++ - 最快的 C++ map ?

c++ - 无法弄清楚为什么没有在 SDL 中绘制线

c++ - 为什么用 std::forward 禁用模板参数推导?

c++ - 遍历模板化列表

c++ - 函数特化/重载规则示例