[英]Following code in a constructor generates warning
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中,向量具有一個構造函數,該構造函數接受初始化列表參數。 您也可以將它包含在自己的類中。 請注意,后者與正常情況相同:
std::vector<int> v ({1,2,3,4,5});
這有助於說明初始化列表現在是實際類型。
如果您想看看Stroustrup的模糊,我會向您介紹他的C ++ 11常見問題解答 。
對於以下解決方案:您需要致電
pthread_mutex_init(&mutex_map[key], NULL);
而不是使用PTHREAD_MUTEX_INITIALIZER
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.