c++ - 如何在 constexpr 中进行 strlen?

标签 c++ clang c++20

我正在使用 clang++ 13.0.1
下面的代码有效,但它显然很难看。我如何写一个strlen? -编辑- 受到答案的启发,看来我可以自己实现 strlen

#include <cstdio>
constexpr int test(const char*sz) {
    if (sz[0] == 0)
        return 0;
    if (sz[1] == 0)
        return 1;
    if (sz[2] == 0)
        return 2;
    return -1;
    //return strlen(sz);
}
constinit int c = test("Hi");

int main() {
    printf("C %d\n", c);
}

最佳答案

你可以只使用 C++17 string_view并通过成员函数size()

获取原始字符串的长度
#include <string_view>
constexpr int test(std::string_view sz) {
  return sz.size();
}

Demo

另一种方法是使用 std::char_traits::length这是 C++17 中的 constexpr

#include <string>
constexpr int test(const char* sz) {
  return std::char_traits<char>::length(sz);
}

关于c++ - 如何在 constexpr 中进行 strlen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71629300/

相关文章:

c++ - Visual Studio 调试器监视问题

c++ - 由于字符数组到指针衰减而无法推导非类型模板参数?

c++ - 未评估上下文中的默认模板参数和 lambda : bug or feature?

clang 表达式中未使用的值

c++ - 在 Ranges-v3 中,如何从一对迭代器创建范围?

c++ - 我怎样才能逆时针旋转

c++ - gcc 与 clang : expanding a captured parameter pack twice

c++ - 信号/槽概念 Qt 和模板...替代方案?

c++ - MacPorts Clang 3.1 缺少标准库安装?

c++ - 不合格调用时 clang 和 gcc 均存在错误