17

在 C++11 中,这是现在有效的语法:

vector<vector<float>> MyMatrix;

而以前,它必须这样写(注意空格):

vector<vector<float> > MyMatrix;

我的问题是标准用来允许第一个版本的修复是什么?

是否可以像制作>令牌而不是一样简单>>?如果不是这样,那么这种方法有什么不适用的?

我认为这样的形式myTemplate< x>>3 >没有问题,因为你可以通过做来消除它们的歧义myTemplate<(x>>3)>

4

1 回答 1

22

通过在解析模板参数时向解析规则添加一个特殊情况来修复它。

C++11 14.2/3:解析模板参数列表时,第一个非嵌套>的被视为结束分隔符,而不是大于运算符。类似地,第一个非嵌套>>的被视为两个连续但不同的>标记,其中第一个被视为模板参数列表的末尾并完成了模板 ID

于 2013-04-03T11:03:42.323 回答