如何在 constexpr 中 strlen ?

Eri*_*tch 4 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);
}
Run Code Online (Sandbox Code Playgroud)

康桓瑋*_*康桓瑋 19

您可以只使用 C++17string_view并通过成员函数获取原始字符串的长度size()

#include <string_view>
constexpr int test(std::string_view sz) {
  return sz.size();
}
Run Code Online (Sandbox Code Playgroud)

演示

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

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