为什么 C++20 中 unique_ptr 不是 equal_comparable_with nullptr_t ?

2024-01-12

使用 C++20concept我注意到std::unique_ptr似乎无法满足std::equality_comparable_with<std::nullptr_t,...> https://en.cppreference.com/w/cpp/concepts/equality_comparable概念。从std::unique_ptr https://en.cppreference.com/w/cpp/memory/unique_ptr/operator_cmp的定义,在 C++20 中应该实现以下内容:

template<class T1, class D1, class T2, class D2>
bool operator==(const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y);

template <class T, class D>
bool operator==(const unique_ptr<T, D>& x, std::nullptr_t) noexcept;

这个要求should实施对称比较nullptr——据我了解,这足以满足equality_comparable_with.

奇怪的是,这个问题在所有主要编译器上似乎都是一致的。以下代码被 Clang、GCC 和 MSVC 拒绝:

// fails on all three compilers
static_assert(std::equality_comparable_with<std::unique_ptr<int>,std::nullptr_t>);

Try Online https://gcc.godbolt.org/z/4W631dxz7

然而同样的断言std::shared_ptr被接受:

// succeeds on all three compilers
static_assert(std::equality_comparable_with<std::shared_ptr<int>,std::nullptr_t>);

Try Online https://gcc.godbolt.org/z/PessKoPqY

除非我误解了什么,否则这似乎是一个错误。 我的问题是,这是否是三个编译器实现中的巧合错误,或者这是 C++20 标准中的缺陷?

Note:我正在标记这个语言律师 /questions/tagged/language-lawyer如果这恰好是一个缺陷。


TL;DR: std::equality_comparable_with<T, U>要求两者T and U可转换为共同参考T and U。对于以下情况std::unique_ptr<T> and std::nullptr_t,这需要std::unique_ptr<T>是可复制构造的,但事实并非如此。


系好安全带。这真是一段旅程。考虑我书呆子狙击手 https://xkcd.com/356/.

为什么我们不满足这个概念呢?

std::equality_comparable_with https://en.cppreference.com/w/cpp/concepts/equality_comparable要求:

template <class T, class U>
concept equality_comparable_with =
  std::equality_comparable<T> &&
  std::equality_comparable<U> &&
  std::common_reference_with<
    const std::remove_reference_t<T>&,
    const std::remove_reference_t<U>&> &&
  std::equality_comparable<
    std::common_reference_t<
      const std::remove_reference_t<T>&,
      const std::remove_reference_t<U>&>> &&
  __WeaklyEqualityComparableWith<T, U>;

那是一口。将概念分解为几个部分,std::equality_comparable_with<std::unique_ptr<int>, std::nullptr_t>失败了std::common_reference_with<const std::unique_ptr<int>&, const std::nullptr_t&>:

<source>:6:20: note: constraints not satisfied
In file included from <source>:1: 
/…/concepts:72:13:   required for the satisfaction of
    'convertible_to<_Tp, typename std::common_reference<_Tp1, _Tp2>::type>'
    [with _Tp = const std::unique_ptr<int, std::default_delete<int> >&; _Tp2 = const std::nullptr_t&; _Tp1 = const std::unique_ptr<int, std::default_delete<int> >&]
/…/concepts:72:30: note: the expression 'is_convertible_v<_From, _To>
    [with _From = const std::unique_ptr<int, std::default_delete<int> >&; _To = std::unique_ptr<int, std::default_delete<int> >]' evaluated to 'false'
   72 |     concept convertible_to = is_convertible_v<_From, _To>
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

(为了易读性进行了编辑)编译器资源管理器链接 https://gcc.godbolt.org/z/5jcKbEaKM.

std::common_reference_with https://en.cppreference.com/w/cpp/concepts/common_reference_with要求:

template < class T, class U >
concept common_reference_with =
  std::same_as<std::common_reference_t<T, U>, std::common_reference_t<U, T>> &&
  std::convertible_to<T, std::common_reference_t<T, U>> &&
  std::convertible_to<U, std::common_reference_t<T, U>>;

std::common_reference_t<const std::unique_ptr<int>&, const std::nullptr_t&> is std::unique_ptr<int> (see 编译器资源管理器链接 https://gcc.godbolt.org/z/f797eceeK).

把它们放在一起,有一个传递性要求std::convertible_to<const std::unique_ptr<int>&, std::unique_ptr<int>>,这相当于要求std::unique_ptr<int>是可复制构造的。

为什么是std::common_reference_t不是参考?

Why is std::common_reference_t<const std::unique_ptr<T>&, const std::nullptr_t&> = std::unique_ptr<T>代替const std::unique_ptr<T>&?的文档std::common_reference_t https://en.cppreference.com/w/cpp/types/common_reference对于两种类型(sizeof...(T)是二)说:

  • If T1 and T2都是引用类型,并且简单通用引用类型 S of T1 and T2(如下定义)存在,那么 成员类型类型名称S;
  • 否则,如果std::basic_common_reference<std::remove_cvref_t<T1>, std::remove_cvref_t<T2>, T1Q, T2Q>::type存在,在哪里TiQ是一元 别名模板使得TiQ<U> is U添加Ti的简历- 和 引用限定符,然后是该类型的成员类型类型名称;
  • 否则,如果decltype(false? val<T1>() : val<T2>()),其中 val 是函数模板template<class T> T val();, 是有效类型,那么 成员类型 类型名称 该类型;
  • 否则,如果std::common_type_t<T1, T2>是有效类型,则成员类型类型命名该类型;
  • 否则,没有成员类型。

const std::unique_ptr<T>& and const std::nullptr_t&没有简单的通用引用类型,因为引用不能立即转换为通用基类型(即false ? crefUPtr : crefNullptrT是格式错误的)。没有std::basic_common_reference专业化std::unique_ptr<T>。第三个选项也失败了,但是我们触发了std::common_type_t<const std::unique_ptr<T>&, const std::nullptr_t&>.

For std::common_type https://en.cppreference.com/w/cpp/types/common_type, std::common_type<const std::unique_ptr<T>&, const std::nullptr_t&> = std::common_type<std::unique_ptr<T>, std::nullptr_t>, 因为:

如果申请std::decay至至少其中之一T1 and T2产生一个 不同类型,成员类型名称相同的类型std::common_type<std::decay<T1>::type, std::decay<T2>::type>::type, 如果 它存在;如果不是,则没有成员类型。

std::common_type<std::unique_ptr<T>, std::nullptr_t>事实上确实存在;这是std::unique_ptr<T>。这就是引用被删除的原因。


我们可以修复标准来支持这样的情况吗?

这已经变成了P2404 https://wg21.link/p2404,建议更改为std::equality_comparable_with, std::totally_ordered_with, and std::three_way_comparable_with支持仅移动类型。

为什么我们有这些共同参考的要求?

In `equality_comparable_with` 是否需要需要 `common_reference` ? https://stackoverflow.com/q/61177302/1896169, the T.C. 给出的理由 https://stackoverflow.com/a/61181916/1896169(最初源自n3351 https://wg21.link/n3351第 15-16 页)了解通用参考要求equality_comparable_with is:

[W]两个不同类型的值相等是什么意思?该设计表示,跨类型相等性是通过将它们映射到公共(引用)类型来定义的(需要此转换来保留值)。

只需要==天真地期望该概念的操作不起作用,因为:

[I]不允许有t == u and t2 == u but t != t2

因此,通用参考要求是为了保证数学的可靠性,同时允许可能的实现:

using common_ref_t = std::common_reference_t<const Lhs&, const Rhs&>;
common_ref_t lhs = lhs_;
common_ref_t rhs = rhs_;
return lhs == rhs;

使用 n3351 支持的 C++0X 概念,如果没有异构,此实现实际上可以用作后备operator==(T, U)。 对于 C++20 概念,我们需要一个异构的operator==(T, U)存在,所以这个实现永远不会被使用。

请注意,n3351 表示这种异构相等性已经是相等性的扩展,它仅在单个类型内进行严格的数学定义。事实上,当我们编写异构相等操作时,我们假装这两种类型共享一个公共的超类型,并且操作发生在该公共类型内。

共同参考要求可以支持这种情况吗?

也许共同参考的要求std::equality_comparable太严格了。重要的是,数学要求只是存在一个共同的超类型,其中此提升operator==是一个等式,但是通用参考要求要求更严格,另外还要求:

  1. 公共超类型必须是通过以下方式获得的:std::common_reference_t.
  2. 我们必须能够形成一个共同的超类型参考两种类型。

放宽第一点基本上只是提供一个显式的定制点std::equality_comparable_with您可以在其中明确选择一对类型来满足该概念。对于第二点,从数学上来说,“参考”是没有意义的。因此,第二点也可以放宽,以允许公共超类型可以从两种类型隐式转换。

我们可以放宽公共引用要求,以更严格地遵循预期的公共超类型要求吗?

这很难做到正确。重要的是,我们实际上只关心公共超类型是否存在,但我们实际上不需要在代码中使用它。因此,我们不需要担心效率问题,甚至在编写公共超类型转换时是否无法实现。

这可以通过改变std::common_reference_with部分equality_comparable_with:

template <class T, class U>
concept equality_comparable_with =
  __WeaklyEqualityComparableWith<T, U> &&
  std::equality_comparable<T> &&
  std::equality_comparable<U> &&
  std::equality_comparable<
    std::common_reference_t<
      const std::remove_reference_t<T>&,
      const std::remove_reference_t<U>&>> &&
  __CommonSupertypeWith<T, U>;

template <class T, class U>
concept __CommonSupertypeWith = 
  std::same_as<
    std::common_reference_t<
      const std::remove_cvref_t<T>&,
      const std::remove_cvref_t<U>&>,
    std::common_reference_t<
      const std::remove_cvref_t<U>&,
      const std::remove_cvref_t<T>&>> &&
  (std::convertible_to<const std::remove_cvref_t<T>&,
    std::common_reference_t<
      const std::remove_cvref_t<T>&,
      const std::remove_cvref_t<U>&>> ||
   std::convertible_to<std::remove_cvref_t<T>&&,
    std::common_reference_t<
      const std::remove_cvref_t<T>&,
      const std::remove_cvref_t<U>&>>) &&
  (std::convertible_to<const std::remove_cvref_t<U>&,
    std::common_reference_t<
      const std::remove_cvref_t<T>&,
      const std::remove_cvref_t<U>&>> ||
   std::convertible_to<std::remove_cvref_t<U>&&,
    std::common_reference_t<
      const std::remove_cvref_t<T>&,
      const std::remove_cvref_t<U>&>>);

特别是变化正在发生变化common_reference_with对于这个假设的__CommonSupertypeWith where __CommonSupertypeWith不同之处在于允许std::common_reference_t<T, U>生成参考剥离版本T or U并同时尝试C(T&&) and C(const T&)创建公共参考。有关更多详细信息,请参阅P2404 https://wg21.link/p2404.


我该如何解决std::equality_comparable_with在将其合并到标准之前?

更改您使用的重载

对于所有用途std::equality_comparable_with(或任何其他*_with标准库中的概念),有一个有用的谓词重载,您可以将函数传递给它。这意味着你可以通过std::equal_to()到谓词重载并获得所需的行为(not std::ranges::equal_to,这是有约束的,但无约束的std::equal_to).

这并不意味着不修复是个好主意std::equality_comparable_with, 然而。

我可以扩展自己的类型来满足std::equality_comparable_with?

共同参考要求使用std::common_reference_t,其定制点为std::basic_common_reference https://en.cppreference.com/w/cpp/types/common_reference, 为了...的目的:

类模板basic_common_reference是一个定制点,允许用户影响结果common_reference对于用户定义的类型(通常是代理引用)。

这是一个可怕的黑客行为,但是如果我们编写一个代理引用来支持我们想要比较的两种类型,我们就可以专门化std::basic_common_reference适合我们的类型,使我们的类型能够满足std::equality_comparable_with。也可以看看我如何告诉编译器 MyCustomType 与 SomeOtherType 是 equal_comparable_with SomeOtherType ? https://stackoverflow.com/q/66944119/1896169。如果您选择这样做,请小心;std::common_reference_t不仅被使用std::equality_comparable_with或其他comparison_relation_with概念,您可能会面临引发一系列问题的风险。最好确保公共引用实际上是公共引用,例如:

template <typename T>
class custom_vector { ... };

template <typename T>
class custom_vector_ref { ... };

custom_vector_ref<T>可能是一个很好的选择,可以作为之间的共同参考custom_vector<T> and custom_vector_ref<T>,或者甚至可能在之间custom_vector<T> and std::array<T, N>。小心行事。

如何扩展我无法控制的类型std::equality_comparable_with?

你不能。专精std::basic_common_reference对于您不拥有的类型(或者std::类型或某些第三方库)往好了说是不好的做法,往坏了说是未定义的行为。最安全的选择是使用您拥有的代理类型,您可以通过它进行比较,或者编写您自己的扩展std::equality_comparable_with它为您的自定义相等拼写有一个明确的自定义点。


好的,我知道这些要求的想法是数学健全性,但是这些要求如何实现数学健全性,以及为什么它如此重要?

从数学上讲,平等是一种等价关系。然而,等价关系是在单个集合上定义的。那么我们如何定义两个集合之间的等价关系A and B?简而言之,我们定义了等价关系C = A∪B。也就是说,我们采用一个共同的超类型A and B并定义该超类型的等价关系。

这意味着我们的关系c1 == c2无论在哪里都必须定义c1 and c2来自,所以我们必须有a1 == a2, a == b, and b1 == b2 (where ai来自A and bi来自B)。转换为 C++,这意味着所有operator==(A, A), operator==(A, B), operator==(B, B), and operator==(C, C)必须是同一平等的一部分。

这就是为什么iterator/sentinel不满足std::equality_comparable_with: while operator==(iterator, sentinel)实际上可能是某种等价关系的一部分,但它不是同一个等价关系的一部分operator==(iterator, iterator)(否则迭代器相等只会回答“两个迭代器都在末尾还是两个迭代器都不在末尾?”的问题)。

实际上很容易写一个operator==这实际上并不是平等,因为你必须记住,异构平等并不是单一的平等。operator==(A, B)你正在写,但却是四个不同的operator==这一切都必须具有凝聚力。

等一下,为什么我们需要全部四个operator==s;为什么我们不能拥有operator==(C, C) and operator==(A, B)出于优化目的?

这是一个有效的模型,我们可以做到这一点。然而,C++ 并不是一个柏拉图式的现实。尽管概念尽最大努力只接受真正满足语义要求的类型,但它实际上无法实现这一目标。因此,如果我们只检查operator==(A, B) and operator==(C, C),我们冒着这样的风险operator==(A, A) and operator==(B, B)做一些不同的事情。此外,如果我们能够拥有operator==(C, C),那么这意味着写起来很简单operator==(A, A) and operator==(B, B)基于我们所拥有的operator==(C, C)。也就是说,要求的危害operator==(A, A) and operator==(B, B)相当低,作为回报,我们更有信心我们实际上是平等的。

然而,在某些情况下,这会遇到困难;看P2405 https://wg21.link/p2405.

多么累啊。我们不能只要求这个吗operator==(A, B)是真正的平等吗?我永远不会真正使用operator==(A, A) or operator==(B, B)反正;我只关心能够进行跨类型比较。

实际上,我们需要的模型operator==(A, B)是一个实际的平等可能会起作用。在这个模型下,我们将有std::equality_comparable_with<iterator, sentinel>,但这在所有已知的背景下到底意味着什么,可以通过敲定来解决。然而,这不是标准所遵循的方向是有原因的,在人们了解是否或如何改变它之前,他们必须首先了解为什么选择标准的模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 C++20 中 unique_ptr 不是 equal_comparable_with nullptr_t ? 的相关文章

  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • 尝试在一行 if 语句中使用 pass 关键字时出错

    困惑这是否有效 if 5 2 0 print no remainder else pass 但不是这个 print no remainder if 5 2 0 else pass SyntaxError invalid syntax 后者不
  • 在 Android Studio 3.4.1 中继续面临进程意外退出

    更新后Java面临一个问题进程意外退出在创建 Android 版本时 我正在使用Android Studio 3 3 0并将其也更新为3 4 1也可以查看任何更新 但没有任何变化 目前我正在使用 classpath com android
  • Coldfusion jQuery getJSON:获取 WDDX 而不是 JSON

    我正在使用 Brian Rinaldi 的 Coldfusion 函数将 dotnet Webservice 数据集转换为查询结构 然后 每个查询都会以 JSON 形式返回到客户端页面 以便在 jQuery 函数中使用 查询是有效的查询对象
  • 如何确定 DynamoDB 项目是否确实被删除?

    DynamoDB 提供了用于删除项目的 API 在返回的DeleteItemOutcome and DeleteItemResult没有字段或方法来确定是否找到该密钥以及该项目是否确实被删除 查明该项目是否确实存在并已删除的唯一方法是请求该
  • 我可以在 python 中调用 Lambda 表达式中的函数吗

    我有一个包含 if else 条件和 for 循环的函数 我想在 lambda 表达式中编写这个函数 我尝试了多种方法来创建这个 lambda 函数 但我还是做不到 这是我的功能和另一个规则 negation no not never sp
  • BroadcastReceiver 未接收广播

    我正在尝试使用以下扩展代码来广播 toast 消息Activity 但广播没有被其他人接收到Activity 则不显示 toast 有人可以解决我的错误吗 主要活动是发送广播 java import android app Activity
  • Vue:在组件中使用自定义库(pdf.js)

    如何在 Vue 组件中使用供应商库 特别是我想使用 PDF js 我只想为这个特定组件加载它 因为它们是相当大的文件 我正在构建一个需要加载 pdf 的编辑器 所以我将 pdf js 和 pdf worker js 放在 src asset
  • 使用 python 运行 crontab

    Python crontab 脚本似乎不起作用 当我手动运行它时 python home ec2 user code1 py 它工作正常 但当放入 crontab 的 cron txt 文件时 却不起作用 我的 crontab 文件是 ho
  • 控制声音的速度 xcode

    我想知道是否可以减慢 xcode 中的声音 我的意思是我将在 xcode 中的支持文件中添加一些 mp3 文件 并且我将创建能够加快或减慢速度的应用程序 例如使用滑块 有可能吗 如果是 有人可以帮我出点主意吗 谢谢 AVAudioPlaye
  • Firebase - 在互联网离线时上传图像

    Firebase 有很好的选择 即使您处于离线状态 也可以使用其数据库并将数据发送到数据库 然后当连接再次建立时 它会自动将数据发送到数据库 是否也可以使用 Firebase 存储来做到这一点 例如即使互联网关闭也发送图像 然后当互联网再次
  • 如何在我自己的函数中使用给定包的内部函数

    我想使用给定 R 包 例如 httr 的内部函数编写一个函数 而不必将这些方法引用为httr method of httr package in the body我的功能 我不想使用 我尝试改变我的函数的环境 例如 enviroment m
  • 如何下载 Android 版谷歌源代码

    如您所知 有数百个项目的清单https android googlesource com https android googlesource com 我想将它们全部下载到 Windows 机器中 根据谷歌的文件 To install in
  • 更新到 dotnet 6 后 dotnet run 不起作用

    我昨天从 Net 5 更新到 Net 6 现在我的项目无法启动dotnet run 然后我得到错误 Building warn Microsoft AspNetCore Server Kestrel Core KestrelServer 5
  • C++ fstream 从选定点擦除文件内容

    我需要删除文件内容从选定的点 C fstream 我应该使用哪个函数 我已经写了objects 我需要删除这些objects在文件的中间 C 没有在给定点截断文件的标准机制 您要么必须重新创建该文件 使用以下命令打开ios trunc并写入
  • 正则表达式至少匹配一个字符或一个空格

    我正在使用以下正则表达式来找出检测至少一个字符 b a zA Z0 9 1 现在我还需要探测空间 我怎样才能做到这一点 您可以使用以下方法检测正则表达式中的空格 s 该标记将捕获字符串中的任何空格 在您的正则表达式中 您可以包含此标记 s括
  • 会话/实体管理器已关闭

    我有这个 Hibernate dao 在我的本地机器上测试时它运行良好 但对于某些交易它会抛出IllegalStateException 我相信这是因为多个用户同时点击它 我可能是错的 更新支付道 Repository public cla
  • 修改PIN中的申请指令

    我正在使用英特尔 PIN 来修改我的应用程序中的指令 我使用此链接中的 Safecopy 示例作为参考 https software intel com sites landingpage pintool docs 81205 Pin ht
  • Prolog列表有未实例化的尾部,需要去掉它

    我正在开发 Prolog 程序 它产生正确的输出 一个列表 但该列表末尾有一个未实例化的变量 我做错了事 并且不知道如何摆脱它 这是代码 plaatsingen plaatsingen Prod Hoev Rest Order Plaats
  • 使用 awk sed 解析更新 puppet 文件

    我有一个包含多行代码的木偶文件 其中有一个部分如下所示 defaultrepo myrepo defaultbranch mybranch gitmod pullstuff othergitcode gitcommit gt b54123b
  • 为什么 C++20 中 unique_ptr 不是 equal_comparable_with nullptr_t ?

    使用 C 20concept我注意到std unique ptr似乎无法满足std equality comparable with