我似乎记得,在以前的时候,在处理嵌套模板参数时,要警告不要将两个>
字符放在彼此旁边(没有空格)。我甚至模糊地记得声明向量的向量并遇到这个编译错误。
但现在我发现编译可怕的>>
......绝对没有错。
我的问题是:
这个惯例在什么时候成为可接受的做法?
它是标准C ++的一部分吗?
它是否始终是标准的一部分,我在大学里使用的编译器(以及我所拥有的教授)只是不支持它?
也许这些问题有点历史,但对我而言,正确的历史背景似乎使得实际的记忆变得微不足道。
答案 0 :(得分:24)
即将推出的标准C ++ 0x(现在是C ++ 11),使用嵌套>>
关闭的模板为officially supported。以前你需要这个空间,或者需要为你付出额外努力的编译器(并做了标准所没有的事情)。
问题源于这样一个事实:C中的>>
是右移运算符,它是一个单个词法标记,与解析过程中需要的两个单独的>
标记冲突在经典构造的C ++编译器中的阶段(仅在模板的情况下,而不是在它实际上是右移)。换句话说,>>
,如果允许关闭嵌套模板,则在词法上是模糊的,但在解析过程中可以(并且正在)通过额外的复杂性来解决(在现代C ++中实际上并不是什么新鲜事)。
答案 1 :(得分:3)
模板中的双尖括号语法在C ++中仍然是非法的,但是一些编译器(特别是Visual Studio)仍然允许它。在刚刚批准并正在等待发布的C ++ 0x中,这已得到纠正。
简而言之,它仍然不是合法的C ++,但很快就会出现。 Sme编译器允许它,但由于不是全部,你仍然应该将空格放在尖括号中。在两三年内,你不再需要这样了。
希望这有帮助!
答案 2 :(得分:1)
的C ++ 0x。您可以查看this question of mine以获取更多信息。
答案 3 :(得分:1)
这不符合标准(直到最近 - 几天前)。
为什么呢?
一句话:效率。
禁止使语法上下文自由。这使编译器更快一点。在过去的美好时光中,每一点都很重要。现在,随着算法和硬件的进步,没有人想要这个麻烦。