gpt4 book ai didi

c++ - 什么时候 std::string_view::operator== 真的是 constexpr?

转载 作者:IT老高 更新时间:2023-10-28 23:00:38 24 4
gpt4 key购买 nike

根据cppreference , std::string_view::operator== 是 constexpr。对于当前的库实现,我很难找到这种情况。

这是我尝试过的:

#include <string_view>

constexpr char x0[] = "alpha";
constexpr char y0[] = "alpha";
constexpr auto x = std::string_view(x0, 5);
constexpr auto y = std::string_view(y0, 5);

constexpr auto a = std::string_view("alpha", 5);
constexpr auto b = std::string_view("alpha", 5);

int main()
{
// a, b, x, y are all constexpr, operator== is constexpr
// therefore I expected this to compile:
static_assert(x == y);
static_assert(a == b);
}

使用 gcc-trunk,这不会编译,因为在 libstdc++ 中 operator== 根本不是 constexpr。

使用 clang-trunk 这也失败了,因为 operator==() 被声明为 constexpr,但使用了不是 constexpr 的 char_traits::compare()。

这些错误是否在标准库中?还是我的期望错了?

如果我的期望是错误的,那么我该如何构造一个可以进行 constexpr 比较的 string_view?

最佳答案

string_view::operator==使用 char_traits<CharT>::compare做比较。 std::char_traits<char>::compare不是 constexpr,所以 operator ==不是 constexpr。

如果您使用 char_traits 的实现实现 constexpr compare ,则比较将是 constexpr。

请注意,标准委员会面前有一篇论文提议制作 std::char_traits<>::compare (以及该类的其他方法)constexpr。

关于c++ - 什么时候 std::string_view::operator== 真的是 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419775/

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