C++ 类型推断(auto和decltype)

C++ 类型推断(auto和decltype)

在像C或C++这样的编程语言中,我们在编译时声明任何变量,并明确声明变量的数据类型。但是类型推断意味着我们使用一些关键字,不需要显式地声明变量或函数的数据类型。这为程序员写入变量的数据类型节省了很多时间。它稍微增加了程序的编译时间,但不影响程序的运行时间。

在这里,我们将声明以下关键字,它们用于C++中的类型推断:

1. auto

auto关键字用在任何变量或任何函数之前,它会自动从其初始值获取变量或函数的数据类型。它基本上获取初始值的表达式或函数的返回值,然后确定变量的数据类型。

要声明任何变量为auto,我们必须在声明时进行初始化。否则,它会报编译时错误。

C++示例1

#include 
using namespace std;
int main() {

    auto a=45;
    auto b='z';
    auto c=5.6;
cout<<"data type of the variable a is: "<

输出:

C++ 类型推断(auto和decltype)

解释

在上面的例子中,我们使用auto关键字声明了三个变量a、b和c。变量 a 是整数类型,b是字符类型,c是双精度类型。

我们使用 typeid 运算符,通过其name()函数返回变量的数据类型。

在输出中,我们得到变量a的整数表示为 i ,变量b的字符表示为c,变量c的双精度表示为d。

C++示例2

#include 
using namespace std;
int main() {

    auto a;
    auto b;
    auto c;
    a=45;
    b='z';
    c=56.63;
cout<<"data type of the variable a is: "<

输出:

C++ 类型推断(auto和decltype)

说明

在上面的代码中,我们声明了三个自动变量,但在声明时没有对它们进行初始化,所以出现了编译时错误。

2. decltype()

decltype()的工作原理与auto相同,但它更像一个运算符,它以一个表达式作为参数。它评估表达式,然后设置变量或实体的数据类型。

C++示例1

#include 
using namespace std;
   char fxn1(){
        return 'c';
    }

    int fxn2(){
        return 565;
    }
int main() {

    decltype(fxn1()) var1;
    decltype(fxn2()) var2;
cout<<"data type of the fxn1 is: "<

输出:

C++ 类型推断(auto和decltype)

解释

在上面的代码中,我们有两个函数,其中一个函数的返回类型是字符,另一个函数的返回类型是整数。我们使用了decltype()关键字并将这两个函数作为参数传递,无论其返回什么,都将是数据类型,因此我们为这些数据类型声明了新变量。

现在fxn1的返回类型和var1的数据类型将是相同的,fxn2的返回类型和var2的数据类型也是相同的。因此,我们使用typeid运算符来获取这两个变量的数据类型。

C ++ 示例2

#include 
using namespace std;
int main() {

    int var1 =56;
    char var2='c';

    decltype(var1) var3 = var2*5;
    decltype(var2) var4 = var2+5;
cout<<"data type of the var3 is: "<

输出:

C++ 类型推断(auto和decltype)

解释

在上述代码中,我们有两个变量:var1具有整数数据类型,而var2具有字符数据类型。我们声明了另外两个变量var3和var4,其中var3具有与var1相同的数据类型,因为我们使用decltype关键字初始化其数据类型,而var4具有与var2相同的数据类型,因为我们使用了decltype关键字。现在我们使用typeid关键字打印了数据类型。

注意:decltype关键字在编译时给出变量或实体的数据类型,而typeid在运行时给出数据类型。

如果我们使用继承,并获取类的数据类型,则decltype将给出指向基类的指针,而typeid将返回指向派生类或子类的指针。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程