【发布时间】:2016-07-23 05:51:21
【问题描述】:
几天前我发现你可以使用类似这样的方式找到编译时strlen:
template<size_t N>
constexpr size_t strlen_(const char (&data)[N]) noexcept{
return N - 1;
}
如果它被编译,那么一切都很好。您可以这样添加重载:
size_t strlen_(const char *s) noexcept{
return strlen(s);
}
然后它会一直编译。
我的问题是 - C++ <cstring> 是否使用类似的东西,如果不使用 - 为什么?
【问题讨论】:
-
如果我使用
char x[3] = {'a', 'b', 'c'};,那会产生意想不到的结果... -
@KerrekSB,这不是 C 风格的字符串。
-
char x[10] = "abc";虽然是一个 c 字符串,但会产生意想不到的结果。 -
它没有。没有编译时优化 - 它占用了很多空间。
-
“如果我让我的代码更复杂和晦涩,也许编译器会更好地优化它”——怀疑。