gpt4 book ai didi

c++ - 具有两个参数之一作为 constexpr 的内联函数

转载 作者:行者123 更新时间:2023-12-02 01:51:41 26 4
gpt4 key购买 nike

假设我有一个带有两个参数的函数,其中第一个参数是动态的,但第二个参数始终是编译时已知的常量:

uint8_t convert_bcd(uint8_t num, uint8_t mask) {
uint8_t result = mask & 0x0F & num;

if constexpr ((mask & 0xF0) != 0) // mask is known at compile time, can be optimized
result += 10 * ((mask & 0xF0 & num) >> 4);

return result;
}

使用示例

uint8_t result1 = convert_bcd(data[0], 0x7F);
uint8_t result2 = convert_bcd(data[1], 0x3F);

我想内联这个函数(如果可能的话)并告诉编译器 if 条件只涉及第二个参数,该参数始终为常量,可以在编译时解析。

我对 inline/const/constexpr 以及如何在我的场景中应用它们以尽可能优化函数感到困惑。

在 C++ 中执行此操作的正确惯用方法是什么?

最佳答案

编写模板。

template<uint8_t mask>
uint8_t convert_bcd(uint8_t num) {
uint8_t result = mask & 0x0F & num;

if constexpr ((mask & 0xF0) != 0)
result += 10 * ((mask & 0xF0 & num) >> 4);

return result;
}


uint8_t result1 = convert_bcd<0x7F>(data[0]);
uint8_t result2 = convert_bcd<0x3F>(data[1]);

关于c++ - 具有两个参数之一作为 constexpr 的内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70207898/

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