本文作者原创,首发在本博客;CSDN 上的同名文章已标注为转载并回链到本页:https://blog.csdn.net/qq_30220519/article/details/139183985
std::ref
std::variant<double, bool, std::string> var; //替代union
**if(std::**holds_alternative
if(0 == var.index())
struct {
void operator()(int) { std::cout << “int!\n”; }
void operator()(std::string const&) { std::cout << “string!\n”; }
} visitor;
std::visit(visitor, var);

template
auto print_type_info(const T& t) {
if constexpr (std::is_integral
return t + 1;
} else {
return t + 0.001;
}
}
template
auto add(T x, U y) -> decltype(x+y) {
return x+y;
}
// sizeof… 不定参数个数
template<typename… Ts>
void magic(Ts… args) {
std::cout << sizeof…(args) << std::endl;
}
// 1. recursive parameter unpack
template
void printf1(T0 value) {
std::cout << value << std::endl;
}
template<typename T, typename… Ts>
void printf1(T value, Ts… args) {
std::cout << value << std::endl;
printf1(args…);
}
template<typename T, typename… Ts>
auto printf3(T value, Ts… args) {
std::cout << value << std::endl;
(void) std::initializer_list
std::cout << args << std::endl;
}(), value)…};
}
template<typename … T>
auto sum(T … t) {
return (t + …);
}
static std::mutex mtx;
std::lock_guardstd::mutex lock(mtx);
// pack a lambda expression that returns 7 into a std::packaged_task
std::packaged_task<int()> task([](){return 7;});
// get the future of task
std::future
std::thread(std::move(task)).detach();
std::cout << “waiting…”;
result.wait(); // block until future has arrived
// 限制参数是否满足指定用法
template
concept bool Stringable = requires(T a){
{a.to_string()} -> string;
};
void print(Stringable a){
std::cout << a.to_string() << std::endl;
}
struct Person {
double height, weight;
Person(double a, double b) : height(a), weight(b) {}
string to_string(){
return “weight: “+ std::to_string(weight) + “, height: “+ std::to_string(height);
}
};
Person p(57, 170.0);
print(p); // uses concept Stringable
1 | std::vector<int> datas{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
std::recursive_mutex 解决死锁
atomic 自带线程锁 fetch_add is +=, store is =, load is read, exchange读取并写入,compare_exchange_strong读取,比较是否相等,相等则写入
std::recursive_mutex 替换std::mutex解决同一线程死锁
std::shared_ptr
GitHub - parallel101/course: 高性能并行编程与优化 - 课件
创作不易,小小的支持一下吧!

