背景:我试图在 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
}
但是,它不会编译,因为 __popcnt64
在 constexpr
中不允许功能。我使用的是 C++17,如果可能的话,我宁愿避免切换到 C++20。
有没有办法让它工作?
最佳答案
您不能制作非 constexpr
函数变成constexpr
一。如果他们的标准库没有声明它 constexpr
,然后就是这样。您将不得不自己编写,这在 C++17 中会很困难。
关于c++ - 在 constexpr 函数中使用 MSVC 的 __popcnt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69040364/