2012-12-25 109 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

因爲>>是一個位移運算符,所以一個較新的編譯器可以區分這兩個。