偶尔看到的c11新特性2

1.关键字decltype:

在c98模板缺陷的改进,例:

template<class T1,class T2>
void ft(T1 x,T2 y)
{
    ...?type xpy = x+y;//类型不知道,涉及类型转换,运算符重载.    
}

在c11增加了decltype:

int x;
decltype(x) y;//使得y的类型类似x.
//在上面的问题可以这样解决
decltype(x+y) xpy = x + y;//decltype(x+y)这整体是一种类型;
deltype具体实现比这里的示例复杂

2.c++后置返回类型

template<class T1,class T2 y>
?type? gt(T1 x,T2 y)
{
    ...
    return x+y;//x+y类型未知,
}

不可使用decltype(x+y)作为返回类型,xy还未声明,就没有xy,当然就没有其类型,所以有下列语法

double h(int x,float y);使用新语法可以写成:

auto h(int x,float y) -> double;

则上面的模板可以写作:

auto gt(T1 x,T2 y) -> decltype(x+y)
{
    ...
    return x+y;
}








你可能感兴趣的:(偶尔看到的c11新特性2)