春暖花开

C++ 笔记

1
2
3
4
5
6
7
#include <type_traits>
std::is_same<T, U> // 判断两个类型是否相同
std::is_same<T, U>::value // 返回 true 或 false
std::decay_t<T> // 返回类型信息,去除 const,引用等。
std::decay_t<decltype(obj)>
1
2
3
4
5
#include <typeinfo>
typeid(type)
typeid(expr) // 返回 class type_info
typeid(expr).name() // 返回 type 的名字c-str

属性指示符:

1
2
3
[[noreturn]] //表示函数不返回值
[[maybe_unused]] //抑制未使用变量的警告
[[fallthrough]] //出现在switch语句中,抑制上一句case没有break而引起的fallthrough的警告

1
2
3
4
5
6
7
8
9
10
11
12
13
// enable_if 可能的实现,若B为真,则 std::enable_if
//有一个与T相等的public typedef类型
#include <type_traits>
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> { typedef T type; };
//Since C++14
template< bool B, class T = void >
using enable_if_t = typename enable_if<B,T>::type;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//C++17
#include<type_traits>
template<typename... T>
struct disjunction; //短路实例化
//若sizeof...(T) == 0, 则为std::false_type
//member
value //
type //最终类型
template<class... B>
inline constexpr bool disjunction_v = disjunction<B...>::value;
template<class B>
strcut negation //构建类型特性 B 的逻辑否定。
template<typename... T>
strcut conjunction;
//若sizeof...(T) == 0,则胃std::true_type, 否则为首个bool(Bi::value) == false 的Bi, 若不存在,则为BN
template< class T, T v >
struct integral_constant;//包装特定类型的静态常量
//C++ 17
template <bool B>
using bool_constant = integral_constant<bool, B>;
  • C++ 中const 对象只能引用const成员函数。
0%