专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
莓辣MAYLOVE  ·  2.24 日本文化中,腋下会被视为性感的表达 ·  3 小时前  
一颗青杏  ·  可以挂在包上带出门的甜酷小玩具(*╹▽╹*) ·  5 小时前  
槽值  ·  抠搜萨莉亚,被“平替后浪”偷家了 ·  13 小时前  
于小戈  ·  惊悚,一个比一个离谱?! ·  4 天前  
51好读  ›  专栏  ›  嵌入式微处理器

auto、decltype关键字知识点笔记

嵌入式微处理器  · 公众号  ·  · 2024-05-24 16:44

正文


START

auto decltype 是 C++11 引入的两个关键字,用于进行类型推导和获取表达式的类型信息。它们的作用和用法如下:

unset unset 1. auto 关键字 unset unset

auto 关键字用于声明变量时,编译器会根据变量的初始值自动推导出其类型。这样可以减少代码中类型的重复书写,提高代码的可读性和可维护性。

auto x = 42;            // x 推导为 int
auto y = 3.14;          // y 推导为 double
auto ptr = new int(5);  // ptr 推导为 int*

auto 也可以与函数返回值一起使用,用于推导函数返回值的类型。

auto add(int a, int b) -> int {
    return a + b;
}

unset unset 2. decltype 关键字 unset unset

decltype 关键字用于获取表达式的类型,但不会实际计算表达式。它常用于模板编程和泛型编程中,可以根据表达式推导出类型,从而避免重复书写类型。

int x = 42;
decltype(x) y;  // y 的类型为 int

std::vector<int> v = {123};
decltype(v)::value_type elem;  // elem 的类型为 std::vector::value_type

decltype 还可以与 auto 结合使用,从而将某个变量的类型推导给另一个变量。

auto x = 42;
decltype(x) y;  // y 的类型为 int

区别和注意事项

  1. auto 用于变量声明时的类型推导,而 decltype 用于获取表达式的类型。
  2. auto 推导的类型是变量的初始值的类型,而 decltype 推导的类型是表达式的类型。
  3. 当表达式为引用类型时, auto 推导的类型会忽略引用,而 decltype 会保留引用。
  4. 在某些情况下, decltype 可以用于推导表达式的返回类型,从而实现函数返回类型的推导。

继续说明:

unset unset 3. auto 关键字的使用场景 unset unset

  • 迭代器和范围循环: 使用 auto 可以简化迭代器的类型声明,以及范围循环中的迭代变量类型声明。

    std::vector<int> vec = {12345};
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        // 使用 *it 处理迭代器指向的元素
    }

    for (auto& elem : vec) {
        // 使用 elem 处理容器中的元素
    }
  • 模板编程: 在模板编程中, auto 可以用于简化类型声明,使得代码更加通用和灵活。

    template<typename T, typename U>
    auto add(T a, U b) -> decltype(a + b) 
    {
        return a + b;
    }
  • 复杂类型简化: 对于一些复杂的类型声明,使用 auto 可以简化代码,提高可读性。

    std::map<intstd
    
    
    
    
        
    ::vector<std::string>> myMap;
    auto it = myMap.begin(); // 简化迭代器类型声明

unset unset 4. decltype 关键字的使用场景 unset unset

  • 获取表达式类型: decltype 用于获取表达式的类型,特别是在模板编程中,可以根据表达式的类型进行相应的操作。

    int x = 42;
    decltype(x) y; // y 的类型为 int

    std::vector<int> v = {123};
    decltype(v)::value_type elem; // elem 的类型为 std::vector::value_type
  • 类型推导: decltype 可以与 auto 结合使用,从而将某个变量的类型推导给另一个变量。

    auto x = 42;
    decltype(x) y; // y 的类型为 int
  • 函数返回类型推导: decltype 可以用于推导函数返回类型,使得函数的返回类型可以根据表达式自动推导出来。

    template<typename T, typename U>
    auto add(T a, U b) -> decltype(a + b) 
    {
        return a + b;
    }

继续介绍 auto decltype 的使用场景:

unset unset 5. auto decltype 的结合使用 unset unset

auto decltype 可以结合使用,以便在一个表达式中使用 decltype 来获取另一个表达式的类型。

auto x = 42;
decltype(x) y; // y 的类型为 int

这种结合使用的方式可以在模板编程中特别有用,因为它可以帮助我们将一个表达式的类型推导给另一个变量,而不必显式地指定类型。这对于模板元编程中的类型推导非常有用,因为在模板函数或类中,类型可能是未知的。

unset







请到「今天看啥」查看全文