0%

Cpp-常用技巧

阅读更多

1 形参类型是否需要左右值引用

2 返回类型是否需要左右值引用

3 traits编译期萃取类型信息

3.1 示例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>

template<typename T>
constexpr bool isVoid = false;

// 特化
template<>
inline constexpr bool isVoid<void> = true;

int main() {
std::cout << std::boolalpha;
std::cout << "isVoid<void>=" << isVoid<void> << std::endl;
std::cout << "isVoid<int>=" << isVoid<int> << std::endl;
};

3.2 示例2

std::conditional_t

3.3 标准库中的traits

  1. std::is_const_v
  2. std::is_reference_v
  3. std::is_lvalue_reference_v
  4. std::is_rvalue_reference_v
  5. std::is_pointer_v