美文网首页
[C++11阅读][3-3-5]追踪返回类型

[C++11阅读][3-3-5]追踪返回类型

作者: 凌霄阁2010 | 来源:发表于2020-11-03 19:05 被阅读0次

语法

返回值类型可以写在参数括号的后面,用右箭头连接,前面用auto占位,这是为了进行返回类型的推导。
以下代码全篇没有用类型生命,auto和decltype完成全部类型推导。

#include <iostream>
using namespace std;
template<typename T1, typename T2>
auto Sum(const T1 & t1, const T2 & t2) -> decltype(t1 + t2) {
    return t1 + t2;
}
template<typename T1, typename T2>
auto Mul(const T1 & t1, const T2 & t2) -> decltype(t1 * t2) {
    return t1 * t2;
}
int main() {
    auto a = 3;
    auto b = 4L;
    auto pi = 3.14;
    auto c = Mul(Sum(a, b), pi);
    cout << c << endl;
}

函数指针的类型推导

以下这段代码非常鬼畜,通过连续返回值推导得到一个嵌套的函数指针类型,比直接声明嵌套的函数指针要直观得多。

#include <type_traits>
#include <iostream>
using namespace std;
int (*(*pf())())() {
    return nullptr;
}
// auto (*)() -> int(*) ()
// auto pf1() -> auto (*)() -> int (*)()
auto pf1() -> auto (*)() -> int (*)() {
    return nullptr;
}
int main() {
    cout << is_same<decltype(pf), decltype(pf1)>::value << endl;
}

转发函数

返回类型可以做成模板的样式,下面的代码中,Forward函数的返回类型是根据T不同而不同的。

#include <iostream>
using namespace std;
double foo(int a) {
    return (double)a + 0.1;
}
int foo(double b) {
    return (int)b;
}
template <class T>
auto Forward(T t) -> decltype(foo(t)) {
    return foo(t);
}
int main() {
    cout << Forward(2) << endl;  // 2.1
    cout << Forward(0.5) << endl;  // 0
}

相关文章

  • [C++11阅读][3-3-5]追踪返回类型

    语法 返回值类型可以写在参数括号的后面,用右箭头连接,前面用auto占位,这是为了进行返回类型的推导。以下代码全篇...

  • C++11 尾置返回类型

    尾置返回类型 尾置返回类型(trailing return type)是C++11中新增的特性,任何函数的定义都可...

  • 用户自定义字面量

    在c++11中,运行用户自定义字面量了。即你可以通过一个后缀来标识字面量是什么类型。 自定义函数返回类型 oper...

  • ★06.关于函数模板

    定义: 特化 代码 输出 默认模板实参【C++11】 显式指定模板实参 显式实例化 尾置返回类型的应用 转发型引用...

  • C++11新特性

    强类型枚举 在C++11之前,枚举类型全局可见,两种枚举之间不可以叫相同名称。而C++11中不同枚举类型内部不会互...

  • 07Dart:函数

    dart函数返回值是可选的,可以不知道返回值类型,但建议还是明确输入类型和返回类型方便修改,也方便阅读,函数也是对...

  • C++11新特性(16)-返回类型后置

    返回类型后置 除了构造函数和析构函数以外,函数声明都需要明确函数的返回类型,在传统的C或者C++中,函数声明大致是...

  • C++面向对象高级编程(下)-第一周-博览网

    第四周 勿在浮沙筑高台 C++11 类的合理转换函数,将类转为相应类型不用写返回值 pointer-like cl...

  • C++14新特性的所有知识点全在这儿啦!

    前面程序喵介绍过C++11的新特性,在这里(),这篇文章介绍下C++14的新特性。 函数返回值类型推导 C++14...

  • C++11的类型推导详解

    auto & decltype 关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decl...

网友评论

      本文标题:[C++11阅读][3-3-5]追踪返回类型

      本文链接:https://www.haomeiwen.com/subject/knycvktx.html