找到字符串结尾的最快方法

fastest way of finding the end of a string

问题很简单:在字符串缓冲区中找到空终止符 ('\0') 位置的最快方法是什么?

std::array<char, 100> str { "A sample string literal" };

我想一个选择是使用 std::strlen.
我能想到的另一个选择是 std::find 甚至 std::ranges::find:

const auto posOfNull { std::find( str.cbegin( ), str.cend( ), '[=11=]' ) };

现在,如果将 ExecutionPolicy(例如 std::execution::par)作为第一个参数传递给它,会有什么不同吗?如果可以,那么哪种政策适合这种特殊情况?

或者我不知道的第三个选项?

What is the quickest way of finding the position of the null-terminator ('[=15=]') in a string buffer?

我假设您的意思是“找到 第一个 空终止符”。

最快取决于细节。你必须测量才能找出答案。 std::strlen 是一个相当安全的默认选择。

Now would it make a difference if an ExecutionPolicy (e.g. std::execution::par

您的缓冲区长度为 100。多线程的开销很容易超过在单线程中查找终止符的时间。

If it would, then which policy is the appropriate one for this particular case?

您测得最快的那个。 None 其中会破坏循环的正确性。

Or maybe a 3rd option that I don't know about?

您可以使用 std::char_traits::length。它优于 std::strlen 的优点是它适用于所有字符类型(与仅 char 相比),并且 constexpr 允许在常量表达式中使用它。