gpt4 book ai didi

c++ - 为什么 std::get 其中 T 是调用 constexpr 函数的结果失败?

转载 作者:行者123 更新时间:2023-11-28 01:16:11 26 4
gpt4 key购买 nike

我的问题是这段代码实际上是如何工作的:

std::variant<int, std::string> is;
constexpr int i = 0;
std::cout << std::get<i>(is);

现在,如果我编写以下代码,它就会失败:

std::variant<int, std::string> is;
std::cout << std::get<is.index()>(is);

在文档中 https://en.cppreference.com/w/cpp/utility/variant/index我发现索引的返回类型是 constexpr。有人可以帮我解决这个问题吗?

更新

现在通过使用 std::string_view 而不是 std::string,后者也可以是 constexpr 并使 is 也是 constexpr。有用。谢谢

最佳答案

如果从 constexpr 值调用,constexpr 方法可以返回一个 constexpr 值。

所以你必须将is定义为constexpr

 constexpr std::variant<int, std::string> is;

不幸的是 std::variant 不能被声明为 constexpr 当 if 不是文字类型时,所以当其中一种类型为 std::string,不是文字。

但通过示例可以工作

 constexpr std::variant<int, long> is;

关于c++ - 为什么 std::get<T> 其中 T 是调用 constexpr 函数的结果失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58651703/

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