- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
从 #include <experimental/filesystem>
升级时遇到问题至#include <filesystem>
.似乎 std::filesystem::path::wstring
方法返回的字符串与 experimental::filesystem
中的字符串不同.我编写了以下包含输出结果的小测试程序。
#include <iostream>
#include <filesystem>
#include <experimental/filesystem>
namespace fs = std::filesystem;
namespace ex = std::experimental::filesystem;
using namespace std;
int main()
{
fs::path p1{ L"C:\\temp/foo" };
wcout << "std::filesystem Native: " << p1.wstring() << " Generic: " << p1.generic_wstring() << endl;
ex::path p2{ L"C:\\temp/foo" };
wcout << "std::experimental::filesystem Native: " << p2.wstring() << " Generic: " << p2.generic_wstring() << endl;
}
/* Output:
std::filesystem Native: C:\temp/foo Generic: C:/temp/foo
std::experimental::filesystem Native: C:\temp\foo Generic: C:/temp/foo
*/
根据https://en.cppreference.com/w/cpp/filesystem/path/string :
Return value
The internal pathname in native pathname format, converted to specified string type.
该程序在 Windows 10 上运行,并使用 Visual Studio 2017 版本 15.8.0 编译。我希望 native 路径名是 C:\temp\foo
.
问题:这是 std::filesystem::path
中的错误吗? ?
最佳答案
大致而言,当编译器出现标准禁止的行为(显式或隐式)或与所述编译器的文档不同的行为时,就会发生错误。
该标准对本地路径字符串的格式没有任何限制,只是底层操作系统应该接受该格式(以下引用)。它怎么能施加这样的限制?该语言对主机操作系统如何处理路径没有发言权,并且要自信地做到这一点,它必须知道它可能编译到的每一个目标,这显然是不可行的。
[fs.class.path]
5 A pathname is a character string that represents the name of a path. Pathnames are formatted according to the generic pathname format grammar ([fs.path.generic]) or according to an operating system dependent native pathname format accepted by the host operating system.
(强调我的)
The documentation of MSVC暗示正斜杠完全可以用作分隔符:
Common to both systems is the structure imposed on a pathname once you get past the root name. For the pathname c:/abc/xyz/def.ext:
- The root name is
c:
.- The root directory is
/
.- The root path is
c:/
.- The relative path is
abc/xyz/def.ext
.- The parent path is
c:/abc/xyz
.- The filename is
def.ext
.- The stem is
def
.- The extension is
.ext
.
它确实提到了首选分隔符,但这实际上仅暗示 std::make_preferred
的行为,而不是默认路径输出的行为:
A minor difference is the preferred separator, between the sequence of directories in a pathname. Both operating systems let you write a forward slash
/
, but in some contexts Windows prefers a backslash\
.
因此,这是否是错误的问题很简单:由于标准对行为没有施加任何限制,并且编译器的文档暗示没有强制需要反斜杠,因此不可能有错误。
剩下的问题是这是否是一个实现质量问题。毕竟,编译器和库的实现者应该知道他们的目标的所有怪癖,并相应地实现特性。
您应该在 Windows 中使用哪个斜杠('\'
或 '/'
),或者它是否真的很重要,有待商榷,所以可以没有权威的答案。任何主张其中一个或另一个的答案都必须非常小心,不要过于基于意见。此外,path::make_preferred
的存在表明 native 路径不一定是首选路径。考虑零开销原则:让路径始终是首选路径会给那些在处理路径时不需要那么迂腐的人带来开销。
最后,std::experimental
命名空间就是它在包装盒上所说的:你不应该期望最终标准化库的行为与其实验版本相同,或者甚至期望最终标准化图书馆将完全存在。处理实验性的东西时就是这样。
关于c++ - C++17 std::filesystem::path 中的 native 路径分隔符错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886072/
在这种情况下,我们在应用程序中同时使用react-native-gesture-handler Touchable和react-native Touchable。 (通过Touchables,我的意思
我有一个 MainFooter包含页脚和迷你播放器的组件,单击时动画显示为全 View 。我有一个问题,每当我们点击一个页脚选项卡时,播放器最大化然后卡在那里,没有响应。 此外,播放器内部的向下箭
我在 native react 之上使用 native 基础组件,我想知道如何在 UI 中使卡片呈圆形而不是矩形。有圆形的 Prop 吗? 最佳答案 好吧,实际上没有人能回答这个问题,但幸运的是我在
我在 native react 之上使用 native 基础组件,我想知道如何在 UI 中使卡片呈圆形而不是矩形。有圆形的 Prop 吗? 最佳答案 好吧,实际上没有人能回答这个问题,但幸运的是我在
我是 react-native 的新手,所以我认为“HTML”而不是“native”可能有点太多了,所以我的问题看起来很愚蠢。 我使用 react-native-router-flux 进行路由,并使
当我使用这个例子在我的应用程序上实现 Image-slider 时,我遇到了这个错误。 import React,{Component} from 'react' import {View,T
我正在为我们的产品使用“Native Base”组件,并且效果很好, 但我有一点被卡住了,它是关于将 Items 放入 Nativebase Picker 的问题。我的代码是这样的 渲染方法代码 -
正如文档中所建议的,我将一些长的数据获取代码移动到 native 模块中以释放 JS 线程,但我观察到这仍然阻塞了 UI。为什么会这样,我能做些什么来避免这种情况? 从 JS 调用 native 模块
我正在使用一个名为 react-native-svg 的框架在 React Native View 中绘制 SVG 元素。 我的目标是,当我点击 View 时(我在全局 View 上使用 PanRes
在 IOS 中发现错误 Native Module cannot be null 我不使用 react-native-push-notification 最佳答案 这通常发生在您未能将第三个库链接到您
当应用程序关闭时,我可以获得由 Linking.getInitialURL() 点击的深层链接网址。 .当应用程序处于后台状态时,则不会安装任何内容。所以,我什至无法通过 Linking.addEve
1) 说原生库是什么意思?什么样的图书馆?那些将用作 gradle 依赖项? 2)如何链接这些?我在使用 link 或 rnpm 时遇到了麻烦。 最佳答案 链接 native 库意味着您要将已经实现的
我需要帮助来构建我的 react 原生项目。我尝试过react-native run-android,但出现以下错误: react-native : The term 'react-native' i
我需要帮助来构建我的 react 原生项目。我尝试过react-native run-android,但出现以下错误: react-native : The term 'react-native' i
我是 React-Native 的新手,到目前为止我很喜欢它。我正在尝试创建一个屏幕(用于跨平台应用程序),右上角有一个菜单图标,单击时,我想打开一个菜单,希望使用 react-native-menu
RN doco 和其他示例展示了如何从 native iOS View Controller 启动 React-Native View ,但反之则不然。谁能解释一下我该怎么做? 最佳答案 我能够弄清楚
对于 react-native - WebStorm 用户: 我正在使用 Jet Brains IDE WebStorm 开始一个带有 React Native 的项目。 在项目 => node_mo
在升级过去的 react-native 0.60 之后......我被警告我应该取消链接所有手动链接的第 3 方库(因为 RN 现在通过自动链接处理它)。 但是,当我运行 react-native u
你可以使用像 https://github.com/tolu360/react-native-google-places 这样的库吗?在世博项目中?我假设任何 npm 库都可以添加,但是像这个 goo
我主要喜欢 React Native。自 0.22 以来一直在使用它。目前为 0.35。 但是为什么链接原生库就像抽奖一样呢?我很少在第一次拍摄时让它发挥作用,而破裂的东西通常是完全不同的东西。 每个
我是一名优秀的程序员,十分优秀!