📜  c++ 获取数据类型 - C++ (1)

📅  最后修改于: 2023-12-03 15:29:53.101000             🧑  作者: Mango

C++ 获取数据类型

在 C++ 中,我们可以用 typeid 关键字获取一个变量的数据类型。这个关键字定义在 <typeinfo> 头文件中。下面是一个示例:

#include <iostream>
#include <typeinfo>

int main() {
    int a = 42;
    std::cout << typeid(a).name() << std::endl;
    return 0;
}

输出:

i

在这个例子中,typeid(a).name() 返回一个字符串,表示 a 的类型。上面的输出 "i" 表示 a 是一个整数类型 (int)。

我们也可以用 typeid 检查两个变量是否属于同一种类型。下面是一个示例:

#include <iostream>
#include <typeinfo>

int main() {
    int a = 42;
    double b = 3.14159;
    std::cout << std::boolalpha << (typeid(a) == typeid(b)) << std::endl;
    return 0;
}

输出:

false

在这个例子中,我们比较了 ab 的数据类型。因为它们不是同一种类型,所以条件表达式的值为 false。

除了使用 typeid,我们还可以使用 C++ 11 中引入的 decltype 关键字获取一个表达式的类型。下面是一个示例:

#include <iostream>
#include <typeinfo>

int main() {
    int a = 42;
    double b = 3.14159;
    decltype(a + b) c = a + b;
    std::cout << typeid(c).name() << std::endl;
    return 0;
}

输出:

d

在这个例子中,我们使用了 decltype(a + b) 获取 a + b 表达式的类型,然后用这个类型定义了一个新的变量 c。输出结果表明 c 的类型是双精度浮点类型 (double)。

注意,decltype 的返回值并不总是一样的:如果表达式是一个变量名,那么 decltype 返回这个变量的类型;如果表达式是一个函数调用,那么 decltype 返回函数的返回值类型;如果表达式是一个字面值或一个不完整的操作符,那么 decltype 的行为是未定义的。

总之,这里介绍了 C++ 中获取变量的数据类型的两种方法:typeiddecltype。在需要识别变量类型的情况下,这两个关键字都非常有用。