问题标签 [c++20]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何将概念应用于成员变量
我目前正在写我的第一个概念。编译器是使用 -fconcepts 调用的 g++ 7.2。我的概念是这样的:
如您所见,Environment 应该有一个名为 stack 的成员。该成员应与 Stack 的概念相匹配。如何将这样的要求添加到环境中?
c++ - 为可选实现 operator<=>
随着operator<=>
被添加到 C++20 中,我想尝试推理如何在那些不是简单的成员比较的情况下实现这个运算符。
您将如何实现用于比较 anoptional<T>
与 anoptional<U>
或 a的 spaceship 运算符U
,在这种情况下,我们要么必须将 theT
与 the进行比较,U
要么比较底层状态,以获得正确的返回类型?最新论文中没有这样的例子。
c++ - 为什么是 std::list不可排序?
我只是在阅读一篇关于 C++ 概念(即 C++20)的(印刷的,德语的)文章。
文章给出了一个函数模板的例子,使用的Sortable
概念:
它声称编译器会拒绝以下代码:
出现如下错误:
错误:lst 不是带有 < 的随机访问容器
假设这篇文章是正确的 - 为什么int值列表究竟是不可排序的?对我来说,整数列表就像考虑“可排序”事物时的典型示例?!
不,我不是在问std::sort。我在问:为什么 Sortable 的概念不适用于 a std::list<int>
?
c++ - 什么是 C++ 中的 <=>(“宇宙飞船”,三向比较)运算符?
当我尝试学习C++运算符时,我在cppreference.com上偶然发现了一个奇怪的比较运算符,*在一个看起来像这样的表中:
“好吧,如果这些是 C++ 中的常用运算符,我最好学习它们”,我想。但我所有试图解开这个谜团的尝试都没有成功。即使在这里,在 Stack Overflow 上我的搜索也没有运气。
<=>和C++之间有联系吗?
如果有,这个操作员究竟做了什么?
* 与此同时,cppreference.com 更新了该页面,现在包含有关<=>
运营商的信息。
c++ - std::osyncstream 的用途?
新的 C++20 std::osyncstream
( http://en.cppreference.com/w/cpp/io/basic_osyncstream ) 有什么用途?不是std::ostream
已经是线程安全的了吗?
c++ - “比较小于 0”是什么意思?
语境
在阅读一致比较时,我注意到比较动词的特殊用法:
有一个新的三向比较运算符<=>。表达式a <=> b 返回一个对象,如果a < b比较<0 ,如果a > b比较>0 ,如果a和b相等/等价,则比较==0 。
在互联网上找到的另一个例子(强调我的):
它返回一个在失败时比较小于零的值。否则,返回的值可以用作稍后调用 get 的第一个参数。
最后一个示例,可在 GitHub 上找到(重点是我的):
// 执行循环 16 位比较。
// 如果两个数字之间的距离大于 32767,
// 并且数字大于 32768,则减去 65536
// 因此,65535比较小于 0,但大于 65534
// 这处理 65535->0 换行正确围绕案例
当然,对于有经验的程序员来说意义是很清楚的。但是在这些例子中使用比较动词的方式在任何标准化的英语形式中都不是标准的。
问题*
- 编程术语句子“对象比较小于零”如何翻译成简单的英语?
- 这是否意味着如果将对象与结果进行比较,
0
结果将“小于零”? - 为什么说“对象小于零”而不是“对象比较小于零”是错误的?
c++ - 为什么在带有初始值设定项示例的基于范围的 for 语句中 `f().items()` 错误
在他关于 2017 年秋季标准会议的报告中,Herb Sutter 提供了以下示例,说明带有初始化程序的基于范围的 for 语句正在简化什么:
为什么for (auto& x : f().items())
错了?也就是说,什么时候f().items()
产生未定义的行为但T thing = f(); ... thing.items()
不产生它?
(这个问题可能被认为是重复的,但答案只是通过编写问题而不是通过正常搜索来揭示,所以我认为值得将其包含在 StackOverflow 中。)
c++ - 你能为 ContiguousIterator 写一个概念吗?
我知道 ContiguousIterator 在文字规范意义上有概念,但我想知道它是否可以使用 C++20/C++17 Concepts TS 语法编写。
我的问题是,与RandomAccessIterator不同,ContiguousIterator不仅需要一些喜欢it+123
工作的操作,还取决于该操作的运行时结果。
c++ - 是否有任何提议允许模板中的任何参数?
模板的问题是您必须指定您想要的特定项目作为参数,例如 a typename
、 atemplate
或 a value
。但是,您不能说根据下一个参数是否是这三个参数中的任何一个来专门化模板。
我在想,如果有一种方法可以根据这些参数进行专门化,如下例所示:
这是一个带有未指定参数的参数包的模板,并且只能通过专门化访问。
这允许对模板专业化进行更多控制并接受任何参数列表。有谁知道是否有任何关于这样的功能的讨论?
如果没有,提案流程是什么?
c++ - std::is_trivially_equality_comparable_v
对于相等可比类型,相关但比C++11 静态断言更神秘?——</p>
JF Bastien 的论文N4130 “Pad Thy Atomics!” 让我想到,如果我们要使用atomic<T>::compare_exchange_weak()
whereT
是类或结构类型,例如
那么我们真的想要静态断言两件事:
首先,这T
实际上是无锁原子的:
其次,这compare_exchange_weak
将做我们想要的。召回(或来自 N4130)根据和compare_exchange_weak
定义的。所以我们需要检查这些函数是否会做正确的事情:memcmp
memcpy
T
is_trivially_copyable_v
由 STL 提供。但是我们还is_trivially_equality_comparable_v
没有——遗憾的是,我的理解是P0515 一致比较不建议提供。(P0515 是允许编译器检测等式运算符实际上是“微不足道的”的功能——它不是用户提供的,并且在这样那样的条件下被明确默认。但是,它没有引入任何新概念,例如“平凡可比”进入核心语言。)
我对“微不足道的可比性”特征的最佳尝试如下所示:
但是,此定义依赖于std:: has_unique_object_representations_v
, [EDIT:它具有未定义的行为,其值与 ] 的行为无关,operator==
当T
它不是标量类型时。而且我强烈怀疑实际上 has_unique_object_representations_v
会为结构类型(例如我的原始Count
类型)返回垃圾。
- Clang/libc++ 还没有实现
has_unique_object_representations
。 - MSVC 尚未实现
has_unique_object_representations
,AFAIK。 - GCC/libstdc++ 说那个
has_unique_object_representations_v<Yes>
,甚至正确地报告那个not has_unique_object_representations_v<No>
,但是错误地报告那个not has_unique_object_representations_v<Yes2>
和那个has_unique_object_representations_v<No2>
。
所以我的问题是,(1)有没有更好的方法来测试“琐碎的可比性”?is_trivially_equality_comparable
(2) 如果 P0515 进入 C++20 的标准,在(is_trivially_less_than_comparable
等等)提案的方向上是否有任何进展?(3) 应该有吗?