在 C++11 中,引入了 `auto` 和 `decltype` 两个新的关键字,它们都用于处理类型。
1. `auto`:这个关键字用于自动类型推断。当你声明一个变量时,可以使用 `auto` 关键字让编译器自动推断其类型。
auto a = 42; // a is int
auto b = 3.14; // b is double
auto c = "Hello"; // c is const char*
auto d = true; // d is bool
你还可以使用 `auto` 关键字在范围基础的 for 循环中自动推断元素的类型:
std::vector<int> vec = {1, 2, 3, 4, 5};
for(auto i : vec) {
std::cout << i << std::endl;
}
2. `decltype`:这个关键字用于查询表达式的类型。当你需要知道某个表达式的类型,但是又不想或不能显式地指定它时,可以使用 `decltype` 关键字。
int x = 0;
decltype(x) y = x; // y has the same type as x, i.e., int
在模板编程中,`decltype` 关键字尤其有用,因为它可以用于查询模板参数的类型。
template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) {
return t + u;
}
在这个例子中,`decltype(t + u)` 查询 `t + u` 表达式的类型,然后使用这个类型作为函数的返回类型。