美文网首页
模板函数返回类型的演进

模板函数返回类型的演进

作者: cptn3m0 | 来源:发表于2020-03-30 23:38 被阅读0次

提纲

  1. c++03: trick 方法
  2. c++11: auto->decltype 组合
  3. c++14: 自动推导模板返回值类型
// cc14_decltype.cc
#include <iostream>
// c++11之前的方案
template <typename U, typename T>
decltype((*((U*)0)) + (*((T*)0))) Add(U u, T t) {
  auto ret = u + t;
  return ret;
}
 
// c++11的 auto_decltype 方案
template <typename U, typename T>
auto Add2(U u, T t) -> decltype(u + t) {
  return u + t;
}

// c++14 的模板可以自动推导出返回类型
template <typename U, typename T>
auto Add3(U u, T t) {
  return u + t;
}

int main(void) {
  std::cout << "add1: " << Add(1.0, 1) << std::endl;
  std::cout << "add2: " << Add2(2.0, 3) << std::endl;
  std::cout << "add3: " << Add2(3.0, 4) << std::endl;

}

c++11

如果使用-std=c++11 编译代码, 会有以下报错, 因为模板自动推导返回值类型是 c++14的标准支持的特性.

cc14_decltype.cc:14:1: error: 'auto' return without trailing return type; deduced return types are a C++14 extension
auto Add3(U u, T t) {
^
cc14_decltype.cc:21:28: error: no matching function for call to 'Add3'
  std::cout << "add3: " << Add3(1.0, 45) << std::endl;
                           ^~~~
2 errors generated.

c++14

这里的代码是清晰的.

相关文章

  • 模板函数返回类型的演进

    提纲 c++03: trick 方法 c++11: auto->decltype 组合 c++14: 自动推导模板...

  • C++学习第18课,高级编程:函数模板

    1 函数模板的定义 template<类型参数表> 返回值 函数名(数据参数表) { 函数模板定义体; } 例...

  • 函数模板和类模板--GeekBand

    一 函数模板函数模板,实际上是建立一个通用函数,其返回值类型和形参类型不具体指定,用一个虚拟的类型来代替。这个通用...

  • 模板

    通常有两种形式:函数模板和类模板;函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。 ...

  • 函数

    函数类型作为函数参数 函数类型作为函数返回值 返回值是函数类型的函数,叫做高阶函数(Higher-Order Fu...

  • [C++ Primer Note5] 函数

    大多数类型都能用作函数的返回类型,一种特殊的返回类型是void,它表示函数不返回任何值。函数的返回类型不能是数组类...

  • iOS开发 - 「Swift 学习」Swift 函数(函数定义、

    Swift 函数 Swift 函数包含了参数类型及返回值类型: 函数声明: 告诉编译器函数的名字,返回类型及参数 ...

  • template 模板

    两种通式:函数模板通式,类模板通式 一、函数模板通式 二、类模板通式 三种类型的模板形参:类型形参,非类型形参和模...

  • C++函数指针、指针函数、引用函数

    函数指针的声明:返回类型 (*函数名) (形参); 指针函数的声明:返回类型 * 函数名 (形参); 引用函数的声...

  • 基本语法

    定义包 定义函数 将表达式作为函数体、返回值类型⾃动推断的函数: 函数返回⽆意义的值: Unit 返回类型可以省略...

网友评论

      本文标题:模板函数返回类型的演进

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