与向量的模板问题

时间:2012-12-25 17:30:02

标签: c++ vector

  

可能重复:
  For nested templates, when did `>>` become standard C++ (instead of `> >`)?
  Why did templates of templates (e.g. vector<vector<int> >) require a space between the closing angle brackets prior to C++0x?

我只是想创建一个向量:

vector<Transform3D<double>> tempVector;

这是我得到的编译错误:

/../main.cpp:34:26: error: a space is required between consecutive right angle brackets
  (use '> >')
vector<Transform3D<double>> tempVector;
                         ^~
                         > >

没有意义的是,为什么通过将矢量更改为错误来解决问题:

vector<Transform3D<double > > tempVector;

为什么vector<Transform3D<double>>vector<Transform3D<double > >不相同?

2 个答案:

答案 0 :(得分:2)

它们不相同(至少在C ++ 11之前),因为最后>>个字符被解析为单个运算符(operator>>)。在它们之间放置一个空格会导致预期的行为。

同样的情况发生在编译器将<:解析为tigraph / digraph的开头的情况。例如:

N<::T> // <: parsed as [

分隔运算符的空格使代码正常工作。

答案 1 :(得分:1)

因为>>是一个位移运算符,所以较新的编译器可以区分这两者。