随笔分类 - 编程语言
c++20 模板约束
摘要:concept 在 c++20 中,提案许久的 concept 被加入到标准中了,这也意味着不用再写恼人的 SFINAE 了(除非你是一个受虐狂,喜欢对着一堆报错中找到错误的位置)。 c++20 之前 在 c++20 之前,如果需要对模板实参进行编译期检查,只能使用 SFINAE ,或者是部分使用
Copy and Swap
摘要:Copy and Swap 在 c++ 中,什么是 copy and swap ? struct Foo { Foo() { std::cout << "Foo construct\n"; } Foo(const Foo &) { std::cout << "Foo copy construct\n
实现一个 std::optional
摘要:实现一个 std::optional 如果写过 c# 或者是 rust ,那么对于里面的可空类型一定是很常用的。在 c++17 中添加了 std::optional ,也就是所谓的可空类型。 不过这里的实现是 placement new 的方式,也是位于栈上。 实现的主要点是申请一块内存空间,由于需
实现一个简单的 std::unique_ptr
摘要:实现一个简单的 std::unique_ptr 简介 std::unique_ptr 是一个独占资源所有权的智能指针,通过 RAII 来自动管理资源的构造和析构。 在标准库中,std::unique_ptr 的通常实现是具有空基类优化。具体来讲,对于 std::unique_ptr 的删除器是其类型
c++ 中的左右值
摘要:c++ 中的左右值 前言:最近又需要再次复习一下关于 c++ 中 lvaue 和 rvalue 相关的知识。 左值和右值 简单看 int a = 1; 这条语句,对于左边的 a ,我们是可以对其取地址的,而对于右边的 1 来说,我们无法对其去地址。 对于能够取地址的 a ,位于=左边,我们就将其称之