2

これはコンパイルされます:

std::map<int, std::vector<int> > vDescriptorAtom;

これ:

std::map<int, std::vector<int>> vDescriptorAtom;

次のエラーが発生します。

src/MessageHandler.cpp:191: error: >> should be > > within a nested template argument list

これは明らかに>>演算子であるためです。しかし、GCC がスローするエラーを見ると、何を言おうとしているのか理解できません。「ネストされたテンプレート引数リスト」とはどういう意味ですか? ありがとう。

4

3 に答える 3

4

std::map括弧の外側のペアの間のもの (1) は、テンプレートのテンプレート引数リストです。

std::map<int, std::vector<int>>
// (1)  ^                     ^
// (2)                   ^   ^

内側のペア (2) はテンプレートのテンプレート引数リストであり、最初の内側にネストさstd::vectorれており、それがエラーの内容です。

C++11 より前は>>、パーサーの作業を楽にするために、最後に空白が必須でした (ご覧のとおり、代わりに右シフト演算子として解釈されます)。多くのコンパイラは、意味のあるエラー メッセージを表示するために、とにかく正しく解析する努力をしており、それが不可能ではないことを証明しています。これが、C++11 でこの制限が緩和された理由の 1 つだと思います。

于 2013-10-23T12:06:20.427 に答える