c++ - 在 constexpr 函数中使用 MSVC 的 __popcnt

标签 c++ visual-c++ c++17 bit-manipulation constexpr

背景:我试图在 MSVC 项目中重新利用为 GCC 编写的一些 C++ 代码。我一直在尝试重构代码以使其与 MSVC 编译器兼容。
简化,最初的功能之一是这样的:

[[nodiscard]] constexpr int count() const noexcept {
    return __builtin_popcountll(mask);//gcc-specific function
}
其中 mask 是 64 位成员变量。到 MSVC 的明显转换是:
[[nodiscard]] constexpr int count() const noexcept {
    return __popcnt64(mask); // MSVC replacement
}
但是,它不会编译,因为 __popcnt64constexpr 中不允许功能。
我使用的是 C++17,如果可能的话,我宁愿避免切换到 C++20。
有没有办法让它工作?

最佳答案

您不能制作非 constexpr函数变成constexpr一。如果他们的标准库没有声明它 constexpr ,然后就是这样。您将不得不自己编写,这在 C++17 中会很困难。

关于c++ - 在 constexpr 函数中使用 MSVC 的 __popcnt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69040364/

相关文章:

c++ - GetCommandLine linux *true* 等效

c++ - 如何在C++中异步调用静态方法?

C++ 'true' 和 'false' 关键字在 Visual C++ 6.0 中突然不正确或错误

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

c++ - 模板推导指南似乎不起作用

c++ - 将从不可复制派生的对象放置到 vector 中

c++ - 在 C++ 中跟踪函数调用的方法

c++ - 错误 : not. exe 已停止工作 - 尝试构建 LLVM 时

c++ - 如何在MFC中捕获帧

file - 检查文件写入是否完成