作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我试图在 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
中不允许功能。
最佳答案
您不能制作非 constexpr
函数变成constexpr
一。如果他们的标准库没有声明它 constexpr
,然后就是这样。您将不得不自己编写,这在 C++17 中会很困难。
关于c++ - 在 constexpr 函数中使用 MSVC 的 __popcnt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69040364/
MS Visual C++ 在具有 SSE4.2 的 CPU 上支持 2 种类型的 popcnt 指令: __popcnt() _mm_popcnt_u32() 我发现的唯一区别是 __popcnt(
在我的 Microsoft 特定代码中,我有这样的东西(可以正常工作和构建) wfx->Channels = __popcnt(type); Mingw 在识别 __popcnt 时遇到问题关于我可以
背景:我试图在 MSVC 项目中重新利用为 GCC 编写的一些 C++ 代码。我一直在尝试重构代码以使其与 MSVC 编译器兼容。 简化,最初的功能之一是这样的: [[nodiscard]] cons
我很想知道 MSVC 是否为 bitset::count 使用了编译器内部 __popcnt。 环顾四周,我发现这是 VS2017 的 std::bitset::count 的实现: size_t c
我是一名优秀的程序员,十分优秀!