最新的标准草案N4910在[模板.重载.链接]中有关于函数等效性的示例:template<int I> concept C = true; template<typename T> struct A { void f() requires C<42>; //...
我一直在阅读C++23提出的库更改列表,对于std::out_ptr和std::inout_ptr(它们的_t兄弟)非常好奇。据我所知,它们是一种智能指针的包装器,以便与原始指针兼容,但我还没有理解它们。也许这里有人熟悉该提案或可以给出一个不那么像ISO的解释或示例?
灵感来源:为什么C++23将废弃std::aligned_storage,使用什么替代? 所链接的提案P1413R3(废弃std::aligned_storage)说: 使用aligned_*会导致未定义行为(这些类型无法提供存储空间。) 这是指[intro.object]/3: ...
根据cppref: std::allocator<T>::allocate_at_least 通过调用::operator new(还可以提供一个额外的std::align_val_t参数),分配至少n个未初始化的存储空间,每个存储空间的大小为count * sizeof(T)...
为了提高向 std::string 中写入数据的性能,C++23 特别引入了resize_and_overwrite(),用于处理 std::string。在 [string.capacity] 中,标准如下描述: template<class Operation> const...
C++23的std::optional终于得到了一些非常有用的补充。 由于我对FP的了解非常基础,我想知道以下两个操作的语法(根据我的搜索,它们是两个基本的单子操作): 单子绑定 单子返回 我最好的猜测是: 单子绑定是transform 单子返回只是C++17的std::optional构...
随着C++23的推出,将会有 std::pair<T1, T1>::operator =( const pair &other ) const; 对于我来说,对const对象进行赋值操作符没有任何意义,因为对象是不可修改的。为什么C++23会在pair上有这个运算符呢...
C++23引入了std::function的表亲std::move_only_function,正如其名称一样,它是一个仅支持移动语义的包装器,用于移动语义可调用对象(演示):#include <functional> #include <memory> int ma...
C++23在optional<T>中添加了一些关于“单子式(monadic-style)”的功能: optional<T>::and_then()方法(忽略this的限定符): template<class F> constexpr auto and_...