📜  C++ 14中的返回类型推导和示例

📅  最后修改于: 2021-05-30 09:41:32             🧑  作者: Mango

在本文中,我们将讨论C++ 14中的返回类型推导。在C++ 14中使用自动返回类型,编译器将尝试自动推断出返回类型。

程序1:

C++14
// C++14 program to illustrate the
// return type deduction
#include 
using namespace std;
  
// Function to multiply the two
// numbers a and b
auto multiply(int a, int b)
{
  
    // Return the product
    return a * b;
}
  
// Driver Code
int main()
{
    int a = 4, b = 5;
  
    // Function Call
    cout << multiply(a, b);
  
    return 0;
}


C++14
// C++ 14 program to illustrate the
// return type deduction
#include 
using namespace std;
  
// Function to increment the
// value of a
auto increase(int& a)
{
    // Increment a
    a++;
  
    // Return the updated value
    return a;
}
  
// Driver Code
int main()
{
    int b = 10;
  
    // Function Call
    int& c = increase(b);
  
    // Print the value b and c
    cout << b << c;
    return 0;
}


C++14
// C++14 program to illustrate return
// type deduction using auto&
#include 
using namespace std;
  
// Function to increment the value
// of a and return the updated value
auto& increase(int& a)
{
    a++;
    return a;
}
  
// Driver Code
int main()
{
    int b = 10;
  
    // Function Call
    int& c = increase(b);
    cout << b << '\n'
         << c;
  
    return 0;
}


C++14
// C++14 program to illustrate return
// type deduction using decltype()
#include 
using namespace std;
  
// Function that increments the value
// of a and return the updated value
decltype(auto) increase(int& a)
{
    a++;
    return a;
}
  
// Driver Code
int main()
{
    int b = 10;
  
    // Function Call
    int& c = increase(b);
  
    cout << b << '\n'
         << c;
  
    return 0;
}


输出:
20

说明在上面的程序中,编译器将执行乘法(int a,int b)函数。作为传递的参数45 ,编译器将返回20,并且由于其数据类型是整数,因此编译器将自动推导该类型为整数,并以整数形式返回20。

程式2:

C++ 14

// C++ 14 program to illustrate the
// return type deduction
#include 
using namespace std;
  
// Function to increment the
// value of a
auto increase(int& a)
{
    // Increment a
    a++;
  
    // Return the updated value
    return a;
}
  
// Driver Code
int main()
{
    int b = 10;
  
    // Function Call
    int& c = increase(b);
  
    // Print the value b and c
    cout << b << c;
    return 0;
}

输出:

说明可以看出,在上述程序中,编译器显示错误。这是因为在函数gain(int&a)中,编译器将返回11,并且由于其类型是整数,因此编译器将其类型推导为整数并返回它,但是在主函数中,我们将数值分配给整数参考变量c ,这就是为什么它显示错误。

现在,可以通过两种方式解决上述问题:

使用auto&

C++ 14

// C++14 program to illustrate return
// type deduction using auto&
#include 
using namespace std;
  
// Function to increment the value
// of a and return the updated value
auto& increase(int& a)
{
    a++;
    return a;
}
  
// Driver Code
int main()
{
    int b = 10;
  
    // Function Call
    int& c = increase(b);
    cout << b << '\n'
         << c;
  
    return 0;
}
输出:
11
11

使用decltype(auto)

C++ 14

// C++14 program to illustrate return
// type deduction using decltype()
#include 
using namespace std;
  
// Function that increments the value
// of a and return the updated value
decltype(auto) increase(int& a)
{
    a++;
    return a;
}
  
// Driver Code
int main()
{
    int b = 10;
  
    // Function Call
    int& c = increase(b);
  
    cout << b << '\n'
         << c;
  
    return 0;
}
输出:
11
11
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”