cpp11的 Type traits
时间: 2023-05-31 07:03:21 浏览: 65
Type traits 是在编译期间检查类型信息的工具集合。 它们包含在 STL 和 C++11 中。 类型特征是用于确定类型属性的一种机制,例如,是整数类型还是浮点类型,是否具有迭代器,是否具有复制构造函数等。 这种机制可以用于模板元编程,以根据类型属性执行不同的操作。
C++11 中引入了许多新的类型特征。 其中一些是:
1. is_same:检查两个类型是否相同。
2. is_pointer:检查给定类型是否是指针类型。
3. is_reference:检查给定类型是否是引用类型。
4. is_integral:检查给定类型是否是整数类型。
5. is_floating_point:检查给定类型是否是浮点类型。
6. is_array:检查给定类型是否是数组类型。
7. is_enum:检查给定类型是否是枚举类型。
8. is_class:检查给定类型是否是类类型。
9. is_function:检查给定类型是否是函数类型。
10. is_const:检查给定类型是否是 const 类型。
11. is_volatile:检查给定类型是否是 volatile 类型。
这些类型特征可以用于编写更加通用的代码,因为它们可以根据类型属性执行不同的操作。 例如,可以使用 is_pointer 检查一个类型是否是指针类型,然后根据结果执行不同的操作。
相关问题
cpp11的static_assert
在C++11中,static_assert是一个编译时断言,用于在编译时检查某些条件是否成立。如果条件不成立,则编译器会报错,并显示指定的错误消息。
static_assert的语法如下:
```cpp
static_assert(condition, message);
```
其中,condition是一个编译时可求值的常量表达式,如果它的值为false,则会触发一个编译期错误。message是一个字符串字面量,用于指定错误消息。
例如,下面的代码使用了static_assert检查一个类型的大小是否等于4:
```cpp
#include <type_traits>
static_assert(sizeof(int) == 4, "int must be 4 bytes");
```
如果int的大小不是4个字节,编译器会报错,并输出指定的错误消息。这可以帮助开发者在编译时发现一些潜在的问题。
cpp11的所有新特性
1. 自动类型推导
2. 列表初始化
3. foreach循环
4. lambda表达式
5. 右值引用和移动语义
6. 委托构造函数
7. 默认和删除函数
8. constexpr函数和常量表达式
9. 变长参数模板
10. 线程支持库
11. std::unique_ptr和std::shared_ptr
12. std::function
13. std::tuple和std::make_tuple
14. std::array和std::initializer_list
15. std::atomic
16. static_assert
17. override和final关键字
18. Unicode字符串支持
19. Null指针常量
20. Range-Based for循环
21. Move semantics
22. Variadic templates
23. Type traits
24. Lambda expressions
25. Uniform initialization
26. Delegating constructors
27. Explicit conversion operators
28. std::chrono
29. std::condition_variable_any
30. std::future和std::promise
31. Thread-local storage
32. std::regex
33. std::unordered_map和std::unordered_set
34. std::to_string和std::stoi等函数
35. std::forward和std::move函数
36. std::tie函数
37. std::enable_if和std::is_same等类型判定函数