18得票1回答
模板约束中的函数等效性 vs 成员函数约束

最新的标准草案N4910在[模板.重载.链接]中有关于函数等效性的示例:template<int I> concept C = true; template<typename T> struct A { void f() requires C<42>; //...

18得票1回答
理解 C++23 中的 std::inout_ptr 和 std::out_ptr

我一直在阅读C++23提出的库更改列表,对于std::out_ptr和std::inout_ptr(它们的_t兄弟)非常好奇。据我所知,它们是一种智能指针的包装器,以便与原始指针兼容,但我还没有理解它们。也许这里有人熟悉该提案或可以给出一个不那么像ISO的解释或示例?

17得票3回答
为什么使用`std::aligned_storage`会导致UB,因为它未能“提供存储空间”?

灵感来源:为什么C++23将废弃std::aligned_storage,使用什么替代? 所链接的提案P1413R3(废弃std::aligned_storage)说: 使用aligned_*会导致未定义行为(这些类型无法提供存储空间。) 这是指[intro.object]/3: ...

17得票1回答
为什么std中仍然没有范围启用的约简算法?

唯一可用的选项是std::ranges::for_each和简单的基于范围的for循环。没有std::accumulate、std::reduce或std::inner_product的对应物。如果存在std::ranges::reduce,那就已经足够了;内积可以通过将reduce与zip组...

16得票4回答
为什么在C++23中要使用allocate_at_least()?

根据cppref: std::allocator<T>::allocate_at_least 通过调用::operator new(还可以提供一个额外的std::align_val_t参数),分配至少n个未初始化的存储空间,每个存储空间的大小为count * sizeof(T)...

14得票1回答
为什么C++23中的string::resize_and_overwrite调用操作作为右值?

为了提高向 std::string 中写入数据的性能,C++23 特别引入了resize_and_overwrite(),用于处理 std::string。在 [string.capacity] 中,标准如下描述: template<class Operation> const...

14得票3回答
C++23 optional 的单子绑定和单子返回是什么?

C++23的std::optional终于得到了一些非常有用的补充。 由于我对FP的了解非常基础,我想知道以下两个操作的语法(根据我的搜索,它们是两个基本的单子操作): 单子绑定 单子返回 我最好的猜测是: 单子绑定是transform 单子返回只是C++17的std::optional构...

13得票1回答
为什么可以有const赋值运算符

随着C++23的推出,将会有 std::pair<T1, T1>::operator =( const pair &other ) const; 对于我来说,对const对象进行赋值操作符没有任何意义,因为对象是不可修改的。为什么C++23会在pair上有这个运算符呢...

13得票1回答
为什么 C++23 的 std::move_only_function 没有模板参数推导指南?

C++23引入了std::function的表亲std::move_only_function,正如其名称一样,它是一个仅支持移动语义的包装器,用于移动语义可调用对象(演示):#include <functional> #include <memory> int ma...

11得票3回答
C++23中optional::transform和optional::and_then有什么区别?

C++23在optional<T>中添加了一些关于“单子式(monadic-style)”的功能: optional<T>::and_then()方法(忽略this的限定符): template<class F> constexpr auto and_...