问题标签 [c++-experimental]

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.

0 投票
1 回答
133 浏览

c++ - MakeStream::iterate() 的 Range V3 是什么?

C++ Streamsiterate()一个初始值n和一个函数,f()然后首先生成,然后nf(n), f(f(n))...

Range V3对此有什么作用?

0 投票
1 回答
1497 浏览

c++ - VC++ 实验模块不起作用

我正在尝试 Visual Studio 2017 版本 15.4.4 中模块的实验性实现。我按照这里描述的说明https://blogs.msdn.microsoft.com/vcblog/2017/05/05/cpp-modules-in-visual-studio-2017/。我能够在控制台应用程序中快速运行它。

导入和使用可用的标准模块不是问题(据我所知)。

但是,当我定义自己的模块时,没有任何效果。我添加了一个文件system.ixx(项目类型 C/C++ 编译器),内容如下:

当我添加import system.iomain.cpp

我收到以下错误:

我还添加/module:reference system.io.idf 了编译器选项,但没有从system.ixx生成system.io.idf文件。

我知道这是实验性的并且有很多问题,但我想知道我应该做些什么来让这个简单的事情发挥作用。

0 投票
1 回答
3966 浏览

c++ - 我们在哪里可以使用 std::barrier 而不是 std::latch?

我最近听说了新的 c++ 标准特性,它们是:

  1. 标准::锁存器
  2. 标准::障碍

我无法弄清楚它们在哪些情况下适用且相互有用。

  • 如果有人可以举一个例子来说明如何明智地使用它们,那将非常有帮助。
0 投票
1 回答
169 浏览

c++ - std::experimental::directory_iterator 的意外别名

std::filesystem在 gcc 6.3.1 中使用了实验性的实现,并且遇到了一些关于std::experimental::filesystem::directory_iteratorand的非常意外的行为std::distance。具体来说,在调用 之后std::distance,原始迭代器似乎已被修改。

经过一堆无果的调试试图在我的代码中找到逻辑错误,我开始在实现中挖掘directory_iterator,最后发现迭代器在std::shared_ptr内部使用,有一个默认的复制构造函数,我假设operator++必须直接递增托管指针。

以下代码重现了该问题:

由于这种实现在传递给期望具有传统值语义的迭代器(据我所知的所有 STL 算法)的函数时会产生非常违反直觉的结果,我很难相信这是预期的行为,但是我犹豫要不要打电话给错误。

显然,这个 API 在发布时是实验性的,但我认为它旨在成为文件系统 TS 的忠实实现。我无法获得完全C++17支持的编译器,所以我一直希望在此期间使用它。

这是预期的行为,我应该期望directory_iterator在未来的版本中以这种方式工作吗?暂时我想我可以使用boost::filesystem.

谢谢!

0 投票
1 回答
1109 浏览

c++ - Visual Studio 2017 std::experimental::filesystem::path 中的 UTF-8 支持

我很高兴看到std::experimental::filesystem在 Visual Studio 2017 中增加了对 的支持,但现在遇到了 Unicode 问题。我有点盲目地假设我可以在任何地方使用 UTF-8 字符串,但是失败了 - 当构造std::experimental::filesystem::path从 achar*到 UTF-8 编码的字符串时,不会发生转换(即使标头在内部使用_To_wide_To_byte函数。我写了一个简单的测试示例:

但正如我之前所说,我只是盲目地假设 UTF-8 会起作用。在构造函数部分下查看 cppreference.com上的std::experimental::filesystem::path它实际上指出:

  • 如果源字符类型是 char,则假定源的编码是本机窄编码(因此在 POSIX 系统上不会发生转换)
  • 如果源字符类型是 char16_t,则使用从 UTF-16 到本机文件系统编码的转换。
  • 如果源字符类型是 char32_t,则使用从 UTF-32 到本机文件系统编码的转换。
  • 如果源字符类型是 wchar_t,则假定输入是本机宽编码(因此在 Windows 上不进行转换)

我不确定如何解释第一行。首先,它只说明了关于 POSIX 系统的一些内容(即使我不明白什么是原生窄编码,这是否意味着 UTF-8 也不能在 POSIX 上工作?)。其次,它没有说明任何关于 Windows 的内容,MSDN 也对此保持沉默。那么,如何以std::experimental::filesystem::path跨平台安全的方式对 Unicode 字符的初始化进行属性处理呢?

0 投票
1 回答
280 浏览

c++ - 容器在概念上肯定是一个范围吗?

range-v3的文档中:

view::all

返回包含源中所有元素的范围。用于将容器转换为范围。

让我感到困惑的是:

  1. 在什么场景下view::all使用?
  2. 标准容器(std::vector,std::list等)在概念上不是范围吗?

例如:

version 1和有什么区别version 2吗?

0 投票
0 回答
111 浏览

c++ - std::experimental 在 Visual C++ 的生产代码中?

在生产中使用 std::experimental 命名空间的当前状态是什么?我们正在使用 Visual C++ 设计一些 C++ UWP Windows 运行时组件。现在,当我们编写异步代码时,我们使用 create_async、create_task ......使用协程会更优雅。但由于它们位于 std::experimental 命名空间中,我们不确定代码是否成熟到可以在生产代码中使用?

0 投票
1 回答
3174 浏览

android - 我可以在 ndk 中使用带有 libc++ 的实验文件系统吗

我正在尝试在带有 ndk r17 的 android 项目中使用实验性文件系统,并且我正在使用 STL c++_static 但我得到了这个:

我展示了一些建议将 -lstdc++fs 添加到链接器参数但链接器找不到该库的主题

当前的 ndk 是否支持此实验功能?

0 投票
1 回答
990 浏览

c++ - 编译时的 std::experimental::source_location

std::experimental::source_location可能会在某个时候添加到 C++ 标准中。我想知道是否可以将位置信息放入编译时领域。本质上,我想要一个从不同源位置调用时返回不同类型的函数。像这样的东西,虽然它没有编译,因为location对象不是constexpr函数参数:

这不会编译,并带有关于的消息

关于return std::integral_constant<int, location.line()>{}线。如果我不能使用它们,那么拥有这些方法source_location有什么好处?constexpr

0 投票
1 回答
2015 浏览

c++ - std::experimental::filesystem::perm_options 尚未声明

我正在尝试在experimental::filesystem 下使用文件权限,但它指出未声明perm_options。我尝试过设置标志lstdc++fsstd=c++14std=c++17无济于事。我从参考站点复制了测试代码,它也没有编译。测试代码如下:

我在使用 g++ 7.3.0 的 Ubuntu 18.04.1 LTS 上。

当我编译我得到错误:

我不确定 std::experimental::filesystem 是否只是缺乏对这个功能的支持,但缺少这一部分似乎很奇怪。任何有关此事的帮助或指导将不胜感激。

编辑:

好的,所以我不知道 g++8,因为 Ubuntu 告诉我我的 g++ 是最新的。我使用命令安装了 g++8.2.0 sudo apt-get install g++-8,我似乎可以使用命令g++-8而不是g++. 我用一个标准测试了这个编译器,cout以确保它可以编译。我将包含和命名空间替换为:

起初它说filesystem没有定义,但我能够用标志来处理它-std=c++17,还添加了标志-lstdc++fs,但现在我得到了错误: