- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 following C++ program ,由于某种原因我不能使用 int64_t
作为模板参数。
#include <iostream>
#include <ranges>
template<typename T>
void fn() {
for (auto val : std::ranges::iota_view{T{1701}, T{8473}}
| std::views::reverse
| std::views::take(5))
{
std::cout << val << std::endl;
}
}
int main()
{
fn<int16_t>();
fn<int32_t>();
// does not compile:
// fn<int64_t>();
}
这是预期的(我做错了什么),还是只是编译器/标准库中的一些不幸的错误?
std::views::reverse
时代码编译为
int64_t
还。
最佳答案
这是一个 libstdc++ 错误,已提交 100639 .iota
是一个令人惊讶的复杂范围。特别是,我们需要选择一个 difference_type
对于我们正在递增以避免溢出的类型,它足够宽(另请参见 P1522 )。结果,我们在 [range.iota] :
Let
IOTA-DIFF-T(W)
be defined as follows:
- [...]
- Otherwise,
IOTA-DIFF-T(W)
is a signed integer type of width greater than the width ofW
if such a type exists.- Otherwise,
IOTA-DIFF-T(W)
is an unspecified signed-integer-like type ([iterator.concept.winc]) of width not less than the width ofW
.[Note 1: It is unspecified whether this type satisfies
weakly_incrementable
. — end note]
iota_view<int64_t, int64_t>
, 我们的差异类型是
__int128
(足够宽的带符号整数类型)。在 gcc 上,
signed_integral<__int128>
是
false
在符合模式(
-std=c++20
)和
true
下编译时带有扩展名 (
-std=gnu++20
)。
reverse_view
是
implemented as :
template<typename _Iterator>
class reverse_iterator
: public iterator<typename iterator_traits<_Iterator>::iterator_category,
typename iterator_traits<_Iterator>::value_type,
typename iterator_traits<_Iterator>::difference_type,
typename iterator_traits<_Iterator>::pointer,
typename iterator_traits<_Iterator>::reference>
{
// ...
typedef typename __traits_type::reference reference;
// ...
_GLIBCXX17_CONSTEXPR reference operator*() const;
// ...
};
不是这样
reverse_iterator
被指定。
[reverse.iterator]定义
reference
键入:
using reference = iter_reference_t<Iterator>;
不同的是后者只是表示
*it
的类型,而前者实际上是通过
iterator_traits
并试图确定是什么
reference
表示如果
It::reference
不作为类型存在。该决定在
[iterator.traits] 中指定:
Otherwise, if
I
satisfies the exposition-only conceptcpp17-input-iterator
,iterator_traits<I>
has the following publicly accessible members: [...]
reference
是
I::reference
如果存在或
iter_reference_t<I>
如果没有。看起来是一回事,但是我们要先满足
cpp17-input-iterator<I>
.和
cpp17-input-iterator<I>
除其他外,要求:
template<class I>
concept cpp17-input-iterator =
cpp17-iterator<I> && equality_comparable<I> && requires(I i) {
// ...
requires signed_integral<typename incrementable_traits<I>::difference_type>;
};
所以基本上,
iterator_t<iota_view<int64_t, int64_t>>
满足
cpp17-input-iterator
当且仅当
signed_integral<__int128>
成立,这仅在我们在
-std=gnu++20
中编译时才成立。 .
reverse_iterator<I>
应该直接使用
iter_reference_t<I>
并且不通过
iterator_traits
,哪些方面必须检查
signed_integral<__int128>
.
关于c++ - 为什么 views::reverse 不适用于 iota_view<int64_t, int64_t>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67573305/
如何在不使用Array.Reverse()方法的情况下反转数组(在C#中)?。例如,。应该会导致。这是我的面试任务。
我有一个内容,我希望它们以倒序排列和换行倒序排列,但顺序相反。这是代码: .a { height: 200px; width: 520px; padding: 5px 5px 5px 10
很多时候,我看到在列表头部运行的函数,例如: trimHead ('\n':xs) = xs trimHead xs = xs 然后我看到了定义: trimTail = reverse
如果 Reverse :: [k] -> [k]是一个类型族,那么 Haskell 无法判断 (Reverse (Reverse xs)) ~ xs .有没有办法让类型系统知道这一点而无需任何运行时成
我有一个单维项目数组,其声明和初始化为: string[] SubDirectorylist = Directory.GetDirectories(TargetDirectory); 我想反转成员并发
这是代码 >>> a=[1,3,2] >>> a [1, 3, 2] >>> a= 3,1,2 >>> a (3, 1, 2) >>> sorted(a) [1, 2, 3] >>> sorted(a
我对以下问题感兴趣:Collections.reverse() 与 Lists.reverse() 哪个更快? 最佳答案 他们做不同的事情。 Collections.reverse 采用可变列表并反转
我对以下问题感兴趣:Collections.reverse() 与 Lists.reverse() 哪个更快? 最佳答案 他们做不同的事情。 Collections.reverse 采用可变列表并反转
我今天在我的 Django 控制台中尝试了这个,我得到了两个不同的结果。我认为 list.reverse() 会反转列表(即第一个对象变成最后一个,依此类推)[1]。然而,情况似乎并非如此。 >>>
这个小小的 jQuery 插件: jQuery.fn.reverse = [].reverse; 它是如何工作的?对象绑定(bind)在哪里 - 反转函数的数组原型(prototype)?我真的不明白
大概都是 mylist.reverse()和 list.reverse(mylist)最终执行 reverse_slice 在 listobject.c通过 list_reverse_impl 或 P
您好,我在添加 django-reversion 和 django-reversion-compare 模块时遇到了一些问题。 我创建了新项目,我想使用 django-reversion 跟踪 use
我有以下观点: def default_new (request): if request.method == "POST": post = EquipmentForm(req
我对 List.Reverse() 有疑问和 Reverse(this IEnumerable source) .查看代码: // Part 1 List list = new List {
我需要首先对字典进行排序,值 reverse=True,对于重复值,按键排序 reverse=False 到目前为止,我有这个 dict = [('B', 3), ('A', 2), ('A', 1)
我有一个字典,其中包含要排序的字符串键和 int 值。我希望它首先按递减值编号排序,然后按字母顺序排序。 例如,如果您有一个包含以下内容的字典: my_dict = {'zebra':1, 'the'
我是编程新手。我正在通过第 9 channel 的 Bob Tabors 视频学习 c#。 你能解释一下为什么我们不能做这样的事情吗: string mijnVoornaam = "Remolino"
这个问题在这里已经有了答案: Why there is two completely different version of Reverse for List and IEnumerable? (
有什么区别 mylist = reversed(sorted(mylist)) 对 mylist = sorted(mylist, reverse=True) 为什么要使用一个而不是另一个? 如何在多
我的问题涉及将新方法添加到现有String 构造函数 的应用程序。在 Stoyan Stefanov 的 Object Oriented Program for Javascript 中,有一个使用
我是一名优秀的程序员,十分优秀!