如何在 constexpr 中进行 strlen?
How to strlen in constexpr?
我正在使用 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();
}
另一种方法是使用 std::char_traits::length
,在 C++17
中是 constexpr
#include <string>
constexpr int test(const char* sz) {
return std::char_traits<char>::length(sz);
}
我正在使用 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();
}
另一种方法是使用 std::char_traits::length
,在 C++17
constexpr
#include <string>
constexpr int test(const char* sz) {
return std::char_traits<char>::length(sz);
}