C++11新特性详解:从NULL到nullptr的转变

需积分: 9 10 下载量 98 浏览量 更新于2024-07-25 收藏 664KB PDF 举报
"C++11-cheatsheet" C++11是C++编程语言的一个重要更新,它引入了许多新特性和改进,旨在提高代码的安全性、效率和可读性。以下是一些C++11的关键变化,以及它们与C++03版本的对比: 1. ** nullptr 作为空指针常量** 在C++03中,通常使用NULL或0来表示空指针。C++11引入了`nullptr`关键字,这是一个类型安全的空指针常量,它避免了整数和指针之间的混淆。例如,在C++11中,`foo(nullptr)`会调用接受`char*`的函数,而在C++03中,`foo(NULL)`可能因为类型推断而调用错误的函数。 2. **标准类型(std::int8_t等)** C++11增加了新的固定宽度整数类型,如`std::int8_t`、`std::uint16_t`等。这些类型确保了在不同平台上具有固定的位宽,使得跨平台的整数操作更为可靠和明确。 3. **原始字符串字面量(raw string literals)** 在C++03中,包含反斜杠`\`的字符串字面量可能导致解析问题。C++11引入了原始字符串字面量,用`R"(...)"`括起来,其中的反斜杠不会被转义。这使得处理包含路径或其他特殊字符的字符串变得更加简单,例如:`R"(C:\A\B\C\D\file1.txt)"`。 4. **右值引用(Rvalue References)** C++11引入了右值引用,允许开发者更好地处理临时对象和移动语义。这提高了性能,尤其是在涉及大对象的复制和赋值时。右值引用可以用来实现`std::move`,它允许将对象的所有权“移动”而不是复制。 5. **lambda表达式** C++11中的lambda表达式提供了一种内联定义匿名函数的方式,可以方便地在函数式编程风格中使用。例如: ```cpp auto add = [](int a, int b) { return a + b; }; int result = add(3, 5); // result will be 8 ``` 6. **自动类型推断(Auto)** C++11的`auto`关键字允许编译器自动推断变量的类型,简化了代码并减少了错误。例如: ```cpp auto value = std::vector<int>{1, 2, 3}; ``` 在这里,`value`的类型会被推断为`std::vector<int>`。 7. **范围基础的for循环(Range-based for loop)** C++11的范围基础for循环简化了遍历容器的语法: ```cpp for (int i : value) { std::cout << i << std::endl; } ``` 这段代码会依次打印出`value`中的所有元素。 8. **多线程支持(std::thread)** C++11添加了对并发编程的内置支持,包括`std::thread`,允许开发者创建和管理线程。 9. **变长参数模板(Variadic Templates)** 变长参数模板允许模板函数或类接受任意数量的参数。这对于实现如`std::tuple`和`std::initializer_list`等通用功能非常有用。 10. **强类型枚举(Strongly-Typed Enums)** C++11引入了强类型枚举(`enum class`),以防止枚举值与其他类型之间的隐式转换,增强了类型安全性。 以上仅是C++11中部分重要特性的介绍,还有更多改进如统一构造/析构、类型别名、静态_assert等,都显著提升了C++语言的现代性和实用性。通过掌握这些新特性,开发者能够编写出更加高效、安全且易于维护的代码。