【发布时间】:2013-04-03 10:58:50
【问题描述】:
在 C++11 中,这是现在有效的语法:
vector<vector<float>> MyMatrix;
而以前,它必须这样写(注意空格):
vector<vector<float> > MyMatrix;
我的问题是标准使用什么修复来允许第一个版本?
是否可以像将> 设为令牌而不是>> 一样简单?如果不是这样,那么这种方法有什么不适用的?
我认为像myTemplate< x>>3 > 这样的形式没有问题,因为您可以通过myTemplate<(x>>3)> 来消除它们的歧义。
【问题讨论】:
-
>是已经一个令牌,但解析器是并且是贪婪的。因此,修复必须看起来不同。 – 一种可能性当然是让>>不成为一个令牌。 -
我猜你正在寻找 §14.2.3: "当解析模板参数列表时,第一个非嵌套 > 被视为结束分隔符而不是更大- than 运算符。类似地,第一个非嵌套的 >> 被视为两个连续但不同的 > 标记,其中第一个作为模板参数列表的结尾并完成模板 ID。"
-
“标准用于允许第一个版本的修复是什么” - 我相信这与 标准 无关。我的意思是 - 实施。我相信这是编译器决定如何实现这个要求,由标准强制。
-
@KirilKirov:标准改变了对 C++ 源代码进行标记的规则。从标准作者的观点来看,这是他们所做的“修复”。如何编写代码以匹配新的(更加上下文敏感的)标记化规则取决于实现者。
-
@KonradRudolph 在此处查看我的第二个问题的改写:stackoverflow.com/questions/15785496#comment22443479_15785583(对 Mike Seymour 的回答发表评论)。
标签: c++ parsing templates tokenize