问题标签 [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.
c++ - MakeStream::iterate() 的 Range V3 是什么?
C++ Streams有iterate()
一个初始值n
和一个函数,f()
然后首先生成,然后n
是f(n)
, f(f(n))
...
Range V3对此有什么作用?
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.io
到main.cpp
我收到以下错误:
我还添加/module:reference system.io.idf
了编译器选项,但没有从system.ixx生成system.io.idf文件。
我知道这是实验性的并且有很多问题,但我想知道我应该做些什么来让这个简单的事情发挥作用。
c++ - std::experimental::directory_iterator 的意外别名
我std::filesystem
在 gcc 6.3.1 中使用了实验性的实现,并且遇到了一些关于std::experimental::filesystem::directory_iterator
and的非常意外的行为std::distance
。具体来说,在调用 之后std::distance
,原始迭代器似乎已被修改。
经过一堆无果的调试试图在我的代码中找到逻辑错误,我开始在实现中挖掘directory_iterator
,最后发现迭代器在std::shared_ptr
内部使用,有一个默认的复制构造函数,我假设operator++
必须直接递增托管指针。
以下代码重现了该问题:
由于这种实现在传递给期望具有传统值语义的迭代器(据我所知的所有 STL 算法)的函数时会产生非常违反直觉的结果,我很难相信这是预期的行为,但是我犹豫要不要打电话给错误。
显然,这个 API 在发布时是实验性的,但我认为它旨在成为文件系统 TS 的忠实实现。我无法获得完全C++17
支持的编译器,所以我一直希望在此期间使用它。
这是预期的行为,我应该期望directory_iterator
在未来的版本中以这种方式工作吗?暂时我想我可以使用boost::filesystem
.
谢谢!
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 字符的初始化进行属性处理呢?
c++ - 容器在概念上肯定是一个范围吗?
从range-v3的文档中:
view::all
返回包含源中所有元素的范围。用于将容器转换为范围。
让我感到困惑的是:
- 在什么场景下
view::all
使用? - 标准容器(
std::vector
,std::list
等)在概念上不是范围吗?
例如:
version 1
和有什么区别version 2
吗?
c++ - std::experimental 在 Visual C++ 的生产代码中?
在生产中使用 std::experimental 命名空间的当前状态是什么?我们正在使用 Visual C++ 设计一些 C++ UWP Windows 运行时组件。现在,当我们编写异步代码时,我们使用 create_async、create_task ......使用协程会更优雅。但由于它们位于 std::experimental 命名空间中,我们不确定代码是否成熟到可以在生产代码中使用?
android - 我可以在 ndk 中使用带有 libc++ 的实验文件系统吗
我正在尝试在带有 ndk r17 的 android 项目中使用实验性文件系统,并且我正在使用 STL c++_static 但我得到了这个:
我展示了一些建议将 -lstdc++fs 添加到链接器参数但链接器找不到该库的主题
当前的 ndk 是否支持此实验功能?
c++ - 编译时的 std::experimental::source_location
std::experimental::source_location
可能会在某个时候添加到 C++ 标准中。我想知道是否可以将位置信息放入编译时领域。本质上,我想要一个从不同源位置调用时返回不同类型的函数。像这样的东西,虽然它没有编译,因为location
对象不是constexpr
函数参数:
这不会编译,并带有关于的消息
关于return std::integral_constant<int, location.line()>{}
线。如果我不能使用它们,那么拥有这些方法source_location
有什么好处?constexpr
c++ - std::experimental::filesystem::perm_options 尚未声明
我正在尝试在experimental::filesystem 下使用文件权限,但它指出未声明perm_options。我尝试过设置标志lstdc++fs
,std=c++14
但std=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
,但现在我得到了错误: