C++ 11相关新特性(using与typedef、尾置返回值类型)

目录

using与typedef

尾置返回值类型


using与typedef

using在C++11中引入,usingtypedef都可以用来为已有的类型定义一个新的名称。

二者最主要的区别在于,using可以用来定义模板别名,using还可以引入命名空间,而typedef不能

  • typedef主要用于给类型定义别名,但是它不能用于模板别名。
typedef unsigned long ulong;
typedef int (*FuncPtr)(double);
  • using可以取代typedef的功能,语法相对简洁。
using ulong = unsigned long;
using FuncPtr = int (*)(double);
  • 对于模板别名,using显得非常强大且直观。
template<typename T>
using Vec = std::vector<T>;
  • 作用范围:using还可以用于命名空间引入,typedef没有此功能。
namespace LongNamespaceName {
    int value;
}

using LNN = LongNamespaceName;
LNN::value = 42; // 相当于 LongNamespaceName::value

总之,更推荐使用using,尤其是当你处理模板时。在现代 C++ 代码规范中,C++11 之后,许多代码规范建议优先使用using而不是typedef。这证明了在实际应用和代码维护中,using更具有优势。

尾置返回值类型

在C++ 98中,函数的定义主要结构如下:

返回值类型 函数名(形式参数1, 形式参数2, ...)
{
    函数体
}

但是如果返回值类型比较长,例如返回一个数组指针`int (*)[10]`时,上面的写法就会不便于阅读:

int (*)[10] func()
{
    // ...

    return arr; // 返回一个数组的首地址
}

而在C++ 11中,为了更好的可读性,可以使用->结合对应的函数返回值放置于形参列表后方,而在原来的函数名前方需要使用auto,所以下面的代码可以修改为:

auto func() -> int (*)[10]
{
    // ...

    return arr;// 返回一个数组的首地址
}

也可以结合decltype关键字,如下:

template <typename T, typename U>
auto func(T a, U b) -> decltype(a + b) 
{    
    return a + b;
}
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怡晗★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值