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

阿里云服务器建站个人创建微信小程序

阿里云服务器建站,个人创建微信小程序,前程无忧网站开发待遇怎么样,服务周到的上海网站建设公一、auto 关键字 ​作用 auto 允许编译器根据变量的初始化表达式自动推导其类型,无需显式指定。 ​C11 的改进 ​基本用法 auto x 5; // x 推导为 int auto y 3.14; // y 推导为 double auto str "hello"; // str 推导为 const …

一、auto 关键字

作用

auto 允许编译器根据变量的初始化表达式自动推导其类型,无需显式指定。

C++11 的改进
  1. 基本用法

    auto x = 5;           // x 推导为 int
    auto y = 3.14;        // y 推导为 double
    auto str = "hello";   // str 推导为 const char*
  2. 推导规则

    • auto 会忽略顶层 const 和引用,但保留底层 const
      const int a = 10;
      auto b = a;         // b 类型为 int(忽略顶层 const)
      const auto c = a;   // c 类型为 const intint& ref = x;
      auto d = ref;       // d 类型为 int(忽略引用)
      auto& e = ref;      // e 类型为 int&(显式保留引用)
  3. 常见应用场景

    • 简化迭代器声明
      std::vector<int> vec{1, 2, 3};
      for (auto it = vec.begin(); it != vec.end(); ++it) { /* ... */ }
    • 范围 for 循环
      for (auto& elem : vec) { elem *= 2; } // 修改容器元素
    • 泛型编程
      template <typename T, typename U>
      auto add(T t, U u) -> decltype(t + u) { return t + u; }
  4. 注意事项

    • auto 变量必须初始化:
      auto value; // 错误:无法推导类型
    • 避免推导为不期望的类型(如 std::initializer_list):
      auto list = {1, 2, 3}; // list 类型为 std::initializer_list<int>
      //该问题在C++17中得到了修复

二、decltype 关键字

作用

decltype(expr) 返回表达式 expr 的类型,保留顶层 const 和引用,且不计算 expr 的值。

将变量的类型声明为表达式指定的类型。
C++98 的局限性
  • 无法直接获取表达式的类型,需依赖类型萃取(如 typeid,但丢失类型信息)。
C++11 的改进
  1. 基本用法

    int x = 5;
    const int& rx = x;
    decltype(x) a = x;       // a 类型为 int
    decltype(rx) b = x;      // b 类型为 const int&
    decltype(5 + 3.14) c;    // c 类型为 double
  2. 推导规则

    • 若 expr 是变量:返回变量声明类型(包括 const 和引用)。
    • 若 expr 是表达式:返回表达式的结果类型(保留值类别和 const):
      int i = 0;
      int* p = &i;
      decltype(*p) d = i;    // d 类型为 int&(解引用操作返回左值)
      decltype(i + 0) e;     // e 类型为 int(表达式结果为纯右值)
  3. 常见应用场景

    • 函数返回类型后置​(结合 auto):
      template <typename T, typename U>
      auto add(T t, U u) -> decltype(t + u) { return t + u; }
    • 模板元编程
      template <typename T>
      auto clone(const T& obj) -> decltype(new T(obj)) {return new T(obj);
      }
    • 保留引用和 const
      const std::vector<int> vec{1, 2, 3};
      decltype(vec)::value_type x = vec[0]; // x 类型为 const int
  4. 与 auto 的对比

    特性autodecltype
    推导依据初始化表达式任意表达式或变量
    是否计算表达式需要初始化(计算)不计算表达式
    const 和引用处理忽略顶层 const 和引用保留所有修饰符

在C++中,-> 符号在函数声明中用于 ​后置返回类型语法,它允许你将函数的返回类型写在参数列表之后。这种写法主要用于以下场景:

当函数的返回类型依赖于参数时,传统的返回类型前置写法无法直接表达,例如:

// 传统写法(错误示例):返回类型需要用到参数 t 和 u,但此时它们尚未声明!
decltype(t + u) add(T t, U u) { ... } // 编译报错

通过后置语法,可以先用 auto 占位返回类型,再用 -> 指定实际类型:

// 正确写法:返回类型后置
auto add(T t, U u) -> decltype(t + u) { ... }

三、声明相关改进

1. ​类型别名模板 (using)
  • C++98:仅支持 typedef,无法直接定义模板别名。
    typedef std::map<std::string, int> StringIntMap; // 普通类型别名
  • C++11:支持 using 定义模板别名,更清晰且支持模板参数:
    template <typename T>
    using Vec = std::vector<T>; // 模板别名
    Vec<int> vec{1, 2, 3};
2. ​范围 for 循环
std::vector<int> vec{1, 2, 3};
for (auto& val : vec) { val *= 2; }
3. ​委托构造函数
  • C++98:构造函数无法直接调用其他构造函数。
  • C++11:允许构造函数委托:
    class Widget {
    public:Widget(int x) : x_(x) {}Widget() : Widget(0) {} // 委托给 Widget(int)
    private:int x_;
    };

四、对比总结

特性C++98C++11
变量类型声明必须显式指定支持 auto 自动推导
类型推导无直接支持decltype 可推导任意表达式类型
模板别名typedef 不支持模板参数using 支持模板别名
容器遍历迭代器显式遍历范围 for 循环直接访问元素
构造函数复用无法委托支持构造函数委托

五、注意事项

  1. auto 推导陷阱

    auto x = {1}; // x 类型为 std::initializer_list<int>
    auto y{1};    // C++11 中推导为 std::initializer_list<int>// C++17 修正为 int
  2. decltype 与变量名
    decltype(var) 返回变量声明类型,decltype((var)) 可能返回引用(若 var 是左值)。

  3. decltype(auto)(C++14)​:
    结合 auto 和 decltype 规则,保留所有修饰符:

    int x = 0;
    decltype(auto) a = x;   // a 类型为 int
    decltype(auto) b = (x); // b 类型为 int&
http://www.dtcms.com/a/407641.html

相关文章:

  • 免拔卡刷 TikTok 国际版教程|小米手机+电信卡完整指南
  • 【精品资料鉴赏】194页电力行业DeepSeek大模型的财务智能化应用设计方案
  • 部分网站为什么网页打不开的原因及解决方法wordpress frp穿透
  • 网站建设和运营的课程wordpress账号注册
  • FineReport自定义登录系统技术
  • 网站建设广告平台推广做自己的网站多少钱
  • SyncTV+cpolar:跨地域同步追剧的远程方案
  • Redis 面试宝典
  • 【LeetCode_21】合并两个有序链表
  • 大庆建设工程交易中心网站提供网站建设管理
  • VSCode编译器测试yolo环境配置
  • 网站建设类国外企业招聘网站
  • tp做网站房地产培训网站建设
  • php网站做分享到朋友圈网站设置搜索框是什么知识点
  • 免费psd图片素材网站ui设计培训大概多少钱
  • 《C++程序设计》笔记p6
  • 安徽同济建设集团网站公司搭建网站模板
  • 【读书笔记】《大国大成》
  • C++笔记(基础)引用 inline内联函数
  • 焦作网站建设公司哪家好dz整站网站建设
  • 建站快车品牌北京网站建设兴田德润放心
  • cuda编程笔记(22)-- NVIDIA Triton Inference Server
  • 怎么知道网站是否被百度收录软件开发工具有哪些
  • 伦理治理进入程序化攻坚阶段
  • 经典网站赏析永久使用免费虚拟主机
  • 【跟我学YOLO】YOLO26:YOLO Vision 2025 最新发布的端到端视觉 AI 新突破
  • 什么网站百度收录好最新国家大事时政新闻
  • 怎么做网站手机版辅助设计软件有哪些
  • Model Context Protocol (MCP)详解与Spring Boot集成实战
  • 珠海h5模板建站网站建设考试卷a卷