gpt4 book ai didi

c++ - "SSE 4.2 insanity"提案文件中的 "if consteval"是什么意思?

转载 作者:行者123 更新时间:2023-12-03 07:54:28 27 4
gpt4 key购买 nike

我正在阅读关于 if consteval (§3.2) 的 C++ 论文,并看到一段显示 constexpr strlen 实现的代码:

constexpr size_t strlen(char const* s) {
if constexpr (std::is_constant_evaluated()) {
for (const char *p = s; ; ++p) {
if (*p == '\0') {
return static_cast<std::size_t>(p - s);
}
}
} else {
__asm__("SSE 4.2 insanity");
}
}

我来这里是为了询问 else 分支中的 __asm__ 语句。

我知道这是幽默,并不意味着要认真对待,但我仍然决定做一些研究,以防有人已经解释过。当我用谷歌搜索引用的消息时,我得到的结果不到 10 个,全部都是关于这段代码的。然后我研究了什么是SSE 4.2,发现它是一个CPU指令集,所以我真的不知道它在C++论文中出现的内容,有人有解释吗?感谢那些阅读我的文章的人。

最佳答案

cigien正确的是:

It's a placeholder to mean "some crazy SSE 4.2 stuff" :) It's not a real instruction

虽然公平地说,我不能把这个特别的笑话归功于我,它来自 David Stone 的 constexpr function parameters paper .

这里的重点并不是使用 SSE 指令实现 strlen 的最佳方式,而是如果您手动执行的话,有一种方法可以实现这一点:编写你的程序集,这可能会比手动循环更好,无论哪种方式,它绝对不是 constexpr 友好的——因此特定的指令列表与问题并不真正相关。不管它是什么,它都无法在编译时工作,因此需要将其切换出去。

关于c++ - "SSE 4.2 insanity"提案文件中的 "if consteval"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76395759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com