4
    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

この警告とその解決方法を正確に理解できません

4

2 に答える 2

4

YourPTHREAD_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を参照してください。

于 2012-05-05T00:15:15.927 に答える