4.1 右尖括号>的改进

C++11之前对于双右尖括号优先解析为右移操作符,因此一些场景下会导致编译报错,

比较典型的有:

模板参数传入模板类

template class X{};
template class Y{};

Y> y;		//报错
Y > y;		//用空格分隔

模板类的显示类型转换

static_cast>()

所以,在之前需要在这些场景下将两个>用空格分隔。

static_cast >()

而在C++11将这个限制取消,要求编译器“智能”判断是什么类型。当然这也会带来一些与C++98的兼容性问题,对于下方的代码:

template  class X {};
X<1 >> 5> x ;

很显然,我们需要的是右移操作,但是由于C++11对于右移操作符的优化,上面代码会报错。

当然,正常场景下也不会这么用,此外,如果真的出现这样的场景,我们还可以将1>>5用括号包裹,提高优先级,从而解决。

template  class X {};
X<(1 >> 5)> x ;

你可能感兴趣的:(深入理解C++11新特性,C++11)