首页 > TAG信息列表 > c20
为什么在C 20中不推荐使用std :: rel_ops ::运算符?
根据cppreference.com,将在C 20中弃用std :: rel_ops :: operator!=,>,< =,> =. 背后的理由是什么?解决方法:在C 20中,你得到three-way comparison(运算符< =>),如果提供的话自动“生成”default comparisons: struct A { // You only need to implement a single operator. stc – 什么特性/概念可以保证memsetting一个对象是明确定义的?
假设我已经定义了一个zero_initialize()函数: template<class T> T zero_initialize() { T result; std::memset(&result, 0, sizeof(result)); return result; } // usage: auto data = zero_initialize<Data>(); 为某些类型调用zero_initialize()会导致未定义的行c – 在每个实例化中将lambda作为唯一默认参数的模板
我正在寻找一种方法来自动使默认模板参数在每次实例化模板时都是唯一的.由于lambda表达式创建的未命名函数对象具有不同的类型,我想以某种方式采用它们.随着标准愚蠢删除的最近更改“一个lambda表达式不会出现在……模板参数”限制(见Wording for lambdas in unevaluated contexts)c – 什么是自定义点对象以及如何使用它们?
c标准的最后一个草案引入了所谓的“定制点对象”([customization.point.object]), 它们被范围库广泛使用. 我似乎明白,他们提供了一种编写开始,交换,数据等自定义版本的方法由ADL的标准库发现.那是对的吗? 这与用户如何定义例如过载的先前实践有何不同?从她自己的类型开始命名空间?特c – 我可以获取标准库中定义的函数的地址吗?
请考虑以下代码: #include <cctype> #include <functional> #include <iostream> int main() { std::invoke(std::boolalpha, std::cout); // #1 using ctype_func = int(*)(int); char c = std::invoke(static_cast<ctype_func>(std::tolowe将不再允许在C 20中为程序定义类型的std中的函数模板进行专门化吗?
引自cppreference.com: Adding template specializations It is allowed to add template specializations for any standard library |class (since C++20)| template to the namespace std only if the declaration depends on at least one program-defined type and the s对于迭代器,Range TS和C 20概念是否需要能够使用`operator->`?
我搜索了各种Range TS提议,包括P0896,将范围纳入C 20.从我的阅读中可以看出,Iterator概念在解除引用性方面的唯一要求是* t是产生对象的有效语法某种类型. 由于InputIterator是作为迭代器定义并且是可读的,因此这两者都不需要operator->支持,似乎范围TS和C 20不要求迭代器提供 – >lambdas在未评估的背景下(直到C 20)
我目前正在阅读P0315R1篇论文,该论文在未评估的背景下谈论Lambda 文件中有一个声明解释了为什么lambdas不能出现在未评估的环境中(当然只有在C 20之前),如下所示: Lambdas are a very powerful language feature, especially when it comes to using higher-order algorithms wc – 宇宙飞船操作符的实际使用示例[已关闭]
宇宙飞船操作符的定义意味着对排序有一个强烈的定义,但这是否会影响客户代码的方式或者如何定义类比较运算符? 由于在其他帖子中缺少现实世界的例子,我不完全理解这一部分. 关于宇宙飞船操作符的其他SO帖子: > Spaceship comparison operator in C++ > What is the <=> operator in Cc – 为什么std :: latch如果有std :: barrier?
从文档中可以清楚地看出,它们之间的区别在于std::barrier可以使用多次,而std::latch只能使用一次. 这听起来像std :: latch只是std :: barrier的一个特例,增加了一个限制而不是一个特性.最重要的是,文档说调用count_down并且n大于内部计数器是未定义的行为,因此必须以编程方式强制