auto x = 10; // x的类型被推断为int
auto y = 3.14; // y的类型被推断为double
auto z = std::make_pair(1, "hello"); // z的类型被推断为std::pair<int, const char*>
2. Lambda表达式
Lambda表达式是C++11引入的一种简洁的函数定义方式,它允许在需要函数对象的地方直接定义一个匿名函数。Lambda表达式可以捕获外部变量,并可以具有返回类型和参数列表。例如:
auto max = [](int a, int b) { return a > b ? a : b; };
std::cout << max(3, 5) << std::endl; // 输出5
3. RAII(Resource Acquisition Is Initialization)
RAII是一种管理资源的编程常用方法,它将资源的获取(如内存分配、文件打开、数据库连接等)与对象的生命周期绑定。当对象被创建时,它获取所需的资源;当对象被销毁时,它释放这些资源。这种方法简化了资源管理,并减少了资源泄漏的风险。例如:
{
std::ifstream file("example.txt");
// 使用file进行文件操作
// 当离开这个作用域时,file的析构函数会被调用,自动关闭文件
}
4. enum class
在C++11中,enum class
被引入以替代传统的enum
。enum class
提供了更强的类型安全和更好的作用域控制。它防止了不同枚举类型之间的隐式转换,并允许为枚举值指定作用域。例如:
enum class Color { Red, Green, Blue };
enum class Shape { Circle, Square, Triangle };
Color c = Color::Red; // 正确
// Shape s = Color::Red; // 错误,类型不匹配
5. pImpl(Pointer to IMPLementation)
pImpl是一种将类的接口与其实现进行解耦的非常有用的方式。它通过将类的私有实现封装在一个单独的类中,并通过指针在公共接口类中访问这个私有实现,从而减少了编译依赖和头文件包含。这种方法有助于减少编译时间和提高代码的可维护性。例如:
class MyClassImpl; // 前向声明
class MyClass {
public:
MyClass();
~MyClass();
void doSomething();
private:
MyClassImpl* pImpl; // 指向实现的指针
};
// MyClassImpl类的定义和实现可以在单独的文件中
6. 条件运算符(三元运算符)
条件运算符?:
是一种简洁的if-else语句替代方式。它允许在单个表达式中进行条件判断,并根据判断结果返回不同的值。例如:
int a = 5, b = 10;
int max = (a > b) ? a : b; // max的值为10
7. 位操作技巧
位操作是C++中一种高效的低级操作,可以用于执行各种任务,如检查数字的奇偶性、交换两个变量的值而不使用临时变量等。例如:
int x = 10, y = 20;
x = x ^ y; // x现在存储x和y的异或结果
y = x ^ y; // y现在被恢复为原来的x值
x = x ^ y; // x现在被恢复为原来的y值,完成交换
来自CPP开发前沿公众号