gpt4 book ai didi

C++ 变体转换构造函数与 bool

转载 作者:可可西里 更新时间:2023-11-01 15:48:22 25 4
gpt4 key购买 nike

关于 cppreference (4) 转换构造函数说明如下:

Converting constructor. Constructs a variant holding the alternative type T_j that would be selected by overload resolution for the expression F(std::forward<T>(t)) if there was an overload of imaginary function F(T_i) for every T_i from Types... in scope at the same time, except that:

  • An overload F(T_i) is only considered if the declaration T_i x[] = { std::forward<T>(t) }; is valid for some invented variable x;
  • If T_i is (possibly cv-qualified) bool, F(T_i) is only considered if std:remove_cvref_t<T> is also bool.

我对关于 bool 的第二个要点特别感兴趣.在示例中,它说:

std::variant<std::string, bool> y("abc"); // OK, chooses string; bool is not a candidate

我现在已经使用 clang 7.0.0 ( godbolt )、gcc.8.2 ( godbolt ) 和 VS2017 测试了相同的代码。我想知道为什么包含的替代类型是 bool(对于所有三个编译器)而不是 cppreference 描述的 std::string。这是所有三个编译器的标准库中的错误吗?

我还找到了以下文档:P0608R3 .这是否意味着 cppreference 列出的修改(两个要点)只是提议的,还不是官方标准的一部分?

最佳答案

P0608R3在圣地亚哥被收养。它的措辞已应用于工作草案 - 您可以在 [variant.ctor]/12 中看到新措辞.

作为该更改的一部分,激励示例:

variant<string, bool> x = "abc";

现在包含一个 string(在 c++20 中),而它曾经包含一个 bool(在 c++17 中)。此示例的含义在标准版本之间有所不同。

只是目前还没有标准库实现这个改变。这是非常最近的。它在 libstdc++ 中都列为不完整和 libc++页。但正如您所见,还有大量 C++20 功能尚未实现。好消息是,现在还是 2019 年初,还有很多时间。

关于C++ 变体转换构造函数与 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com