2012-12-25 77 views
0

可能重复:
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 > >不相同?

+0

在使用C++ 11之前,'>>'可能会将编译器混淆为'>>'操作符。 – birryree

回答

2

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

在编译器将<:解析为Tigraph /有向图的开始时也会发生同样的情况。例如:

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

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

1

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