当前位置: 首页 > article >正文

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;
}

http://www.kler.cn/a/287706.html

相关文章:

  • OpenTelemetry 赋能DevOps流程的可观测性革命
  • uniapp自动注册机制:easycom
  • Vue3 模板语法
  • 阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统
  • 【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
  • 狼蛛F87Pro键盘常用快捷键的使用说明
  • ecmascript和javascript的区别
  • unity游戏开发——标记物体 一目了然
  • 深度学习-11-为什么AI需要GPU
  • filter过滤器和reduce求和以及
  • 9.1centos安装postgres
  • JVM GC 调优
  • ARM体系与架构
  • 使用 Bodybuilder 项目简化前端ES查询
  • 某系统存在任意文件下载漏洞
  • Springboot使用Mongo数据库实现文件的上传下载预览等服务接口
  • pbds库
  • App使用Job定时器不准时的原因分析
  • Java项目中的分库分表实践指南
  • 前端学习Day36
  • 【设计模式之原型模式——矩形原型】
  • Spring 事务 数据库连接获取和释放原理
  • 网络安全的历史
  • 基于my Batis优化图书管理系统(总)
  • 通用后台管理系统实战演示(Vue3 + element-plus)汇总篇二
  • 设计模式之生成器方法