C++11 引入了 auto
关键字,使得编译器可以根据初始化表达式自动推导变量的类型。对于复杂类型,如模板类型、嵌套类型、带有多个构造函数的类型等,auto
关键字同样适用。
下面是一些使用 auto
处理复杂类型的例子:
template<typename T>
void foo(T t) {
// ...
}
auto x = 42; // x 的类型被推导为 int
foo(x);
struct Outer {
struct Inner {
int x;
};
};
Outer::Inner y = {42}; // y 的类型被推导为 Outer::Inner
class MyClass {
public:
MyClass(int x) : value(x) {}
MyClass(double x) : value(x) {}
int getValue() const { return value; }
private:
double value;
};
auto z1 = MyClass(42); // z1 的类型被推导为 MyClass
auto z2 = MyClass(3.14); // z2 的类型被推导为 MyClass
在这些例子中,auto
关键字使得编译器可以根据初始化表达式自动推导变量的类型,而不需要显式指定类型。这使得代码更简洁、易读,并且减少了错误的可能性。