1

これはc++11で合法ですか?

std::unordered_map<X, Y> xy_map;
X my_x;
Y my_y;
xy_map.insert(decltype(xy_map)::value_type(my_x, my_y));

これをgcc4.6.3で試しましたが、機能しませんでした。GCCの不満:

expected primary-expression before 'decltype'

私はしないことを望んでいました:

typedef std::unordered_map<X, Y> MyMap;
xy_map.insert(MyMap::value_type(my_x, my_y));

c ++ 11はそれを解決したり、簡単にしたりすることはできないと思います。

4

2 に答える 2

4

コードは正しいC++です。コメントでほのめかされたBasileのように、これはGCC4.7で修正されたバグでした。

于 2012-04-24T15:23:50.453 に答える
2

これはあなたの質問に答えませんが、コンパイラで動作する可能性が高いという利点があります。

xy_map.emplace(my_x, my_y);

これにより、指定された引数から値型が作成されます。最初の引数はキーを構成し、他の引数は値に使用されます。これにより、効果的にstd::pairインプレースが構築されます。したがって、そのような醜いものは必要ありませんdecltype

于 2012-04-24T15:12:40.270 に答える