C++ 新特性---->函数返回类型后置

简介: C++ 新特性---->函数返回类型后置

C++函数返回类型后置主要是用于特别复杂的函数返回类型

注意 函数必须是auto开头 代码实例如下:

#include<bits/stdc++.h>
using namespace std;
auto fool(int a) -> int
{
  return a;
}
int main(int argc,char*argv[])
{
  cout<<fool(10);
  return 0;
}

函数返回值类型后置声明函数能够极大的简化函数的 对于复杂类型的转化

以上图片左图是使用typedef的方法来定义一个代码 typedef int(*bar)(int) 这个代码表明 bar这个函数指针代表的是指向int 参数为int的函数 也充分的体现了泛型编程的核心思想 但是使用typedef定义函数指针还是有点复杂 所以我们使用后值引用的方式 能够简化代码的复杂程度  右图的代码比左图好很多

推导函数模板返回类型(重点)

注意这里的decltype不能写在开头 因为编译器不知道那个时候 T1和T2是干什么的 如果写在开头就会报错

函数返回类型后置代码实际应用:

#include <iostream>
// 函数将两个整数相加,并返回相加结果
auto add(int a, int b) -> int {
    return a + b;
}
// 函数接收一个字符串,并返回字符串长度
auto getStringLength(const std::string& str) -> size_t {
    return str.length();
}
// 函数检查一个数字是否为偶数,并返回布尔值
auto isEven(int num) -> bool {
    if (num % 2 == 0) {
        return true;
    } else {
        return false;
    }
}
int main() {
    int result = add(5, 3);
    std::cout << "5 + 3 = " << result << std::endl;
    std::string str = "Hello, World!";
    size_t length = getStringLength(str);
    std::cout << "Length of the string: " << length << std::endl;
    int number = 7;
    bool even = isEven(number);
    
    if (even) {
        std::cout << number << " is even." << std::endl;
    } else {
        std::cout << number << " is odd." << std::endl;
    }
    return 0;
}

在这个示例中,我们使用了 -> 符号来指定函数的返回类型。函数声明部分没有显示地给出返回类型,而是在参数列表后面使用 -> 符号跟着具体的返回类型。

这样的写法可以使函数声明更加清晰,特别是当函数的返回类型比较复杂或依赖于参数时。它也可以方便地与decltype关键字一起使用来推导函数返回类型。

总结:

函数返回类型后置是C++11引入的一项语法特性,它允许在函数声明中将返回类型放在参数列表之后。

使用函数返回类型后置可以使函数声明更加清晰和易读,尤其是当函数返回类型较为复杂时。

对与复杂的函数返回类型时候 我们除了使用typedef以后还可以使用decltype decltype是复杂函数返回值的最优解

好了 本篇文章就描述道这里 在这里小编有一篇课程想推荐给大家

https://xxetb.xetslk.com/s/2PjJ3T

相关文章
|
2月前
|
编译器 程序员 定位技术
C++ 20新特性之Concepts
在C++ 20之前,我们在编写泛型代码时,模板参数的约束往往通过复杂的SFINAE(Substitution Failure Is Not An Error)策略或繁琐的Traits类来实现。这不仅难以阅读,也非常容易出错,导致很多程序员在提及泛型编程时,总是心有余悸、脊背发凉。 在没有引入Concepts之前,我们只能依靠经验和技巧来解读编译器给出的错误信息,很容易陷入“类型迷路”。这就好比在没有GPS导航的年代,我们依靠复杂的地图和模糊的方向指示去一个陌生的地点,很容易迷路。而Concepts的引入,就像是给C++的模板系统安装了一个GPS导航仪
134 59
|
1月前
|
安全 编译器 C++
【C++11】新特性
`C++11`是2011年发布的`C++`重要版本,引入了约140个新特性和600个缺陷修复。其中,列表初始化(List Initialization)提供了一种更统一、更灵活和更安全的初始化方式,支持内置类型和满足特定条件的自定义类型。此外,`C++11`还引入了`auto`关键字用于自动类型推导,简化了复杂类型的声明,提高了代码的可读性和可维护性。`decltype`则用于根据表达式推导类型,增强了编译时类型检查的能力,特别适用于模板和泛型编程。
26 2
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
88 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
45 0
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
39 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
399 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
51 1
|
2月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
26 3
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
70 0
C++入门6——模板(泛型编程、函数模板、类模板)