自C++11起,auto
关键字允许编译器自动推导变量的类型,这简化了代码编写,特别是在处理复杂类型时。以下是auto
的几种用法及相应的示例代码:
1. 基本变量类型推导
使用auto
可以自动推导局部变量的类型。
auto x = 5; // x 被推导为 int
auto y = 3.14; // y 被推导为 double
auto z = "hello"; // z 被推导为 const char*
2. 在函数返回类型中使用
C++14进一步扩展了auto
的用途,允许在推导函数返回类型时使用。
auto add(int x, int y) {
return x + y;
}
// 返回类型被推导为 int
3. 在范围基于的for循环中使用
auto
在范围基于的for循环中特别有用,可以自动推导集合元素的类型。
std::vector<int> vec = {1, 2, 3, 4};
for (auto num : vec) {
std::cout << num << std::endl; // num 被推导为 int
}
4. 与STL容器一起使用
在使用STL容器时,auto
可以简化迭代器的类型声明。
std::map<std::string, int> map = {{"one", 1}, {"two", 2}};
for (auto it = map.begin(); it != map.end(); ++it) {
std::cout << it->first << " => " << it->second << std::endl;
}
// it 被推导为 std::map<std::string, int>::iterator
5. 在Lambda表达式中使用
auto
可用于推导Lambda表达式的参数类型。
auto lambda = [](auto x, auto y) {
return x + y;
};
// lambda 可以接受任意类型的参数
6. 用于类型复杂的表达式
当表达式类型复杂或难以手动编写时,auto
可以大幅简化代码。
std::map<std::string, std::vector<int>> complexMap;
// 使用auto简化迭代器类型的声明
for (auto& pair : complexMap) {
std::cout << pair.first << ": ";
for (auto num : pair.second) {
std::cout << num << " ";
}
std::cout << std::endl;
}