c++ - 对于嵌套模板,什么时候 `>>` 成为标准 C++(而不是 `>>` )?

标签 c++ templates

我似乎记得,在过去的时候,在处理嵌套模板参数时,被警告不要将两个 > 字符彼此相邻(没有空格)。我什至依稀记得声明了任何 vector 的 vector 并遇到了这个编译错误。

但现在我发现编译可怕的>>绝对没有错...

因此我的问题是:

这种约定在什么时候成为一种可接受的做法?

它是标准 C++ 的一部分吗?

它是否一直是标准的一部分,而我在大学使用的编译器(以及我拥有的教授)还不支持它?

也许这些问题有点历史意义,但对我来说,适当的历史背景似乎使实际内存变得微不足道。

最佳答案

用嵌套 >> 关闭的模板是 officially supported由即将到来的标准 C++0x(现在的 C++11)。以前,您需要空间,或为您付出更多努力的编译器(并且做了标准未指明的事情)。

问题源于 C 中的 >> 是右移运算符,它是单个词法标记,与两个单独的 > 标记冲突这在经典构造的 C++ 编译器的解析阶段是需要的(并且仅在模板的情况下,而不是在它实际上是右移时)。换句话说,如果允许关闭嵌套模板,>> 在词法上是模棱两可的,但这可以(并且正在)通过解析过程中的额外复杂性来解决(这在现代 C++ 中确实不是什么新鲜事) )。

关于c++ - 对于嵌套模板,什么时候 `>>` 成为标准 C++(而不是 `>>` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087033/

相关文章:

c++ - 如何禁止获取对象的地址

Java程序Opencv unsatisfiedlinkerror

c++ - 在C++中按一列对2d数组进行排序

c++ - 在声明函数时映射类的函数

c++ - 使用类模板参数比使用实例变量有什么好处?

c++ - 如何从 box2D 中的 Body* 获取 fixture 的 Shape 点?

c++ - 未解析的外部符号(涉及带有自定义类的模板)

c++ - 没有定义的结构模板的目的是什么?

c++ - 函数输入参数的 auto 是否可以替代函数模板?

javascript - 如何在 Meteor.js #each 包装器中生成多个 SVG