C++11 引入了 auto
关键字,使得编译器可以根据初始化表达式自动推导变量的类型。对于复杂类型,如模板类型、嵌套类型、带有多个构造函数的类型等,auto
关键字同样适用。
下面是一些使用 auto
处理复杂类型的例子:
- 模板类型
templatevoid 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
关键字使得编译器可以根据初始化表达式自动推导变量的类型,而不需要显式指定类型。这使得代码更简洁、易读,并且减少了错误的可能性。