C++11新特性详解:兼容性、静态断言与枚举

需积分: 10 4 下载量 111 浏览量 更新于2024-07-18 收藏 38KB DOCX 举报
"C++11学习总结文档,涵盖了C++11的新特性和改进,旨在提高编程效率和程序性能,同时保持与旧版本的兼容性。文档内容包括面向过程编程和编译器部分的更新,如auto、decltype、constexpr、enum class等。此外,还涉及了预定义宏、字符串处理、宏展开以及整型的扩展和规范。" C++11是C++编程语言的一个重要版本,它引入了大量的新特性和改进,旨在提高开发者的生产力和程序的性能。以下是对这些特性的详细说明: 1. **auto关键字**:C++11引入了`auto`关键字,允许编译器自动推断变量的类型,简化了代码并减少了错误。例如,`auto x = someFunction();`,编译器会根据`someFunction`的返回类型自动为`x`赋类型。 2. **decltype**:`decltype`用于获取表达式的类型,常用于模板元编程和泛型代码中。例如,`decltype(someVariable)`将返回`someVariable`的类型。 3. **constexpr**:`constexpr`关键词指示编译器在编译时计算函数或变量的值,确保它们是常量表达式。这有助于优化代码,因为编译器可以在编译时进行计算,而不是在运行时。 4. **enum class**:强类型枚举`enum class`创建了一个独立的命名空间,避免了枚举值与整型值的混淆。例如,`enum class Color { Red, Green, Blue };`创建了一个名为`Color`的枚举类型,不能直接与整型进行隐式转换。 5. **C99特性**:C++11吸收了C99的许多特性,如long long整型,以及宏的增强。 6. **预定义宏**:C++11添加了一些预定义宏,如`__func__`用于获取当前函数的名字,`__STDC_HOSTED__`, `__STDC__`, `__STDC_VERSION__`, 和 `__STDC_ISO_10646__`用于检查C标准和库的支持情况。 7. **_Pragma操作符**: `_Pragma`提供了比`#pragma`更多的灵活性,如`_Pragma("once")`等同于`#pragma once`,用于头文件只包含一次。 8. **可变参数模板( variadic templates)和__VA_ARGS__**:C++11引入了可变参数模板,允许函数模板接受任意数量的参数。`__VA_ARGS__`宏用于捕获和处理这些参数。 9. **字符串操作**:C++11增强了对Unicode和宽字符的支持,改进了字符串处理。 10. **内存对齐**:C++11提供了更好的内存对齐控制,如`alignas`关键字,以确保数据结构在内存中的布局满足特定的对齐要求。 11. **类型安全的指针和智能指针**:如`std::unique_ptr`和`std::shared_ptr`,提供垃圾回收和防止内存泄漏。 12. **右值引用**:右值引用(rvalue reference)`&&`用于实现移动语义,提高了资源管理的效率。 13. **nullptr**:`nullptr`作为空指针的类型安全替代品,避免了`NULL`和0的混淆。 14. **范围基础的for循环**:`for(auto it : container)`简化了遍历容器的代码,减少了出错的可能性。 15. **多线程支持**:C++11引入了`<thread>`库,提供了标准的多线程编程接口。 通过这些新特性,C++11使代码更简洁、更高效,并降低了出错的概率。对于C++开发者来说,理解和掌握C++11的特性是至关重要的。