问题标签 [c++17]
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++ - 你如何在 C++ 中实现协程
我怀疑它可以便携地完成,但有什么解决方案吗?我认为可以通过创建一个备用堆栈并在函数入口处重置 SP、BP 和 IP,并让产量保存 IP 并恢复 SP+BP 来完成。析构函数和异常安全似乎很棘手,但可以解决。
已经完成了吗?这是不可能的吗?
c++ - 为什么没有将 yield 添加到 C++0x 中?
编辑,在我问这个问题 11 年后:我觉得问这个问题是正确的!C++20 终于做了足够接近的事情。
原始问题如下。
--
我一直在我的许多 Python 程序中使用 yield,它确实在许多情况下清除了代码。我写了一篇关于它的博客,它是我网站的热门页面之一。
C#还提供yield——它是通过调用方的状态保持来实现的,通过一个自动生成的类来保持状态、函数的局部变量等。
我目前正在阅读有关 C++0x 及其添加的内容;在阅读 C++0x 中 lambdas 的实现时,我发现它也是通过自动生成的类完成的,配备了 operator() 存储 lambda 代码。我脑海中自然形成了一个问题:他们是为 lambdas 做的,为什么他们不考虑支持“收益”呢?
当然,他们可以看到协同程序的价值......所以我只能猜测他们认为基于宏的实现(例如Simon Tatham 的)是一个足够的替代品。然而,它们不是,有很多原因:被调用者保持状态、不可重入、基于宏(仅此一点就足够了)等。
编辑: yield
不依赖于垃圾收集、线程或纤维。你可以阅读 Simon 的文章看到我说的是编译器做一个简单的转换,比如:
进入:
垃圾收集?不,线程?不,纤维?不,简单的转变?可以说,是的。
c++ - 什么是聚合和 POD,它们如何/为什么特别?
此常见问题解答是关于聚合和 POD 的,涵盖以下材料:
- 什么是聚合?
- 什么是POD(普通旧数据)?
- 它们有什么关系?
- 它们如何以及为什么特别?
- C++11 有什么变化?
c++ - 如何在 C++ 中创建目录
我刚刚找到了一小段代码,它可以让我在不使用 system() 的情况下使用 windows API 创建一个目录。唯一的问题是我无法在子目录中创建目录。例如
在 C 中创建一个名为 random 的文件夹。
但如果我这样做
它在名为 Usersmorons 的 C che 文件夹中创建,而不是在 Users 下创建文件夹 morons。有什么建议吗?
c++ - 使用强类型枚举的模板参数推导
如果我有一个普通(弱)枚举,我可以将其枚举值用作非类型模板参数,如下所示:
并将其称为:magic<Cat>(t)
据我所知,如果我有一个强类型枚举并且不想对枚举类型进行硬编码,我最终会得到:
现在我必须写: magic<Animal, Animal::Cat>(t)
,这似乎是多余的。
有什么办法可以避免同时输入枚举类和值,短
c++ - 概念转换的等价物是什么?
考虑 aclass A
满足两个概念ConceptA
和ConceptB
。让一个函数foo
为两个概念重载:
注意:此示例使用作为N3701的一部分提出的“简洁表示法”语法,§5
是否存在concept_cast
允许用户选择重载的东西?
例如:假设
ConceptA
说 T 必须有一个成员函数bar()
ConceptB
说 T 必须有一个成员函数baz()
并且class A
同时具有bar()
和baz()
成员函数
它显然是模棱两可的,但是有没有办法像我们static_cast
对正常重载一样明确选择?
更新:接受的答案超过 2 年。c++17有什么更新吗?
c++ - 即使 XZY 具有非复制约束,构造助手 make_XYZ 也允许 RVO 和类型推导
UPDATE1: C++17 为构造函数添加了类型推导——这并不意味着 free 函数是一个劣质的解决方案。
UPDATE2: C++17 增加了保证复制省略(复制在概念上甚至不发生)。因此,使用 C++17,我的代码实际上可以工作并且具有最佳性能。但是我相信 Martinho 的代码使用大括号初始化返回值仍然是更干净的解决方案。但是请查看Barry 的这个答案和 TC 的评论
旧帖子:类型推导不适用于构造函数(至少在 C++11 之前并包括在内)。常见的解决方案是依靠 RVO(返回值优化),编写一个 make_XYZ 模板函数,将其参数转发给构造函数。一个例子是std::make_tuple
。
任何模板 acrobat 知道在 nocopy 策略妨碍时使这项工作正常工作的解决方法吗?一个有效的解决方案必须仍然允许 RVO 发生。
此外,任何 make_XYZ 的要求会随着 C++14 消失吗?
c++ - 什么是 string_view?
string_view
是添加到 C++17的 C++ 库基础 TS( N3921 ) 中的一项提议功能
据我了解,它是一种代表某种字符串“概念”的类型,它是任何类型的容器的视图,可以将可视内容存储为字符串。
- 这是正确的吗 ?
- 规范
const std::string&
参数类型应该变成string_view
? - 还有一个重要的点
string_view
要考虑吗?
c++ - C ++ 1z中的编译时反射?
C++ 标准化委员会中有一个研究小组提供 C++1z 或更高版本的编译时反射。我想知道究竟是什么目的以及预期的工具会有多强大?
例如,是否可以使用这些工具命名函数或类?
如果它没有这么强大,典型的用例会是什么?
c++ - C++1z 的范围状态?
C++ 委员会中有一个关于范围的研究组:
但我没有关注这个研究组的历史,我不确定 C++1z 的预期交付方式是什么(此外我不使用 boost.range,因此我对现有实践没有清晰的认识)。我们会有:
范围作为一对第一个/最后一个迭代器?
union 和其他对范围的集合操作(例如
[v.begin()+5, v.begin()+7[ U [v.begin()+10, v.begin()+15[ U [v.begin()+21, v.begin()+42[
),即:并集、交集、不相交并集、补集?迭代器过滤器(为了在满足条件的情况下执行 for_each)?
其他事情?