簡體   English   中英

以下代碼在構造函數中生成警告

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM