在 C++11 中,引入了 `auto` 和 `decltype` 兩個(gè)新的關(guān)鍵字,它們都用于處理類型。
1. `auto`:這個(gè)關(guān)鍵字用于自動(dòng)類型推斷。當(dāng)你聲明一個(gè)變量時(shí),可以使用 `auto` 關(guān)鍵字讓編譯器自動(dòng)推斷其類型。
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` 關(guān)鍵字在范圍基礎(chǔ)的 for 循環(huán)中自動(dòng)推斷元素的類型:
std::vector<int> vec = {1, 2, 3, 4, 5};
for(auto i : vec) {
std::cout << i << std::endl;
}
2. `decltype`:這個(gè)關(guān)鍵字用于查詢表達(dá)式的類型。當(dāng)你需要知道某個(gè)表達(dá)式的類型,但是又不想或不能顯式地指定它時(shí),可以使用 `decltype` 關(guān)鍵字。
int x = 0;
decltype(x) y = x; // y has the same type as x, i.e., int
在模板編程中,`decltype` 關(guān)鍵字尤其有用,因?yàn)樗梢杂糜诓樵兡0鍏?shù)的類型。
template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) {
return t + u;
}
在這個(gè)例子中,`decltype(t + u)` 查詢 `t + u` 表達(dá)式的類型,然后使用這個(gè)類型作為函數(shù)的返回類型。