c++ - constexpr if 的等效三元运算符?

标签 c++ constexpr c++17 if-constexpr

也许我错过了什么,但我找不到任何提示:C++17 中是否有一个与 constexpr-if 等效的 constexpr 三元运算符?

template<typename Mode>
class BusAddress {
public:
    explicit constexpr BusAddress(Address device) : 
        mAddress(Mode::write ? (device.mDevice << 1) : (device.mDevice << 1) | 0x01) {}
private:
    uint8_t mAddress = 0;    
};

最佳答案

不,没有 constexepr 条件运算符。但是您可以将整个内容包装在 lambda 中并立即对其进行评估(IIFE):

template<typename Mode>
class BusAddress {
public:
    explicit constexpr BusAddress(Address device)
     : mAddress([&]{
          if constexpr (Mode::write) {
            return device.mDevice << 1;
          }
          else {
            return (device.mDevice << 1) | 0x01;
          }         
        }())
     { }
private:
    uint8_t mAddress = 0;    
};

它可能不是有史以来最性感的代码,但它可以完成工作。请注意,从 N4487 开始,lambda 在可能的情况下默认为 constexprP0170 .

关于c++ - constexpr if 的等效三元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011900/

相关文章:

c++ - 为什么 ShellExecute 找不到文件?

c++ - 可以创建任意类型的 constexpr 链表吗?

c++ - 基于模式创建位掩码作为 constexpr

c++ - 类模板中的 Constexpr 成员函数

c++ - 即使OpenCV如此完善,为什么Matlab在计算机视觉社区中如此受欢迎?

c++ - 我可以以某种方式将套接字从winsock2.h传递到unique_ptr并为他制作自定义删除器吗?

c++ - 链接器错误 Lua 5.1

c++ - 如何将多个集成订单整合到我的Integrator类中?

c++ - 为什么 `std::unary_function` 仍然在 c++17 中编译?

c++ - 一个只能由于整数溢出而失败的函数应该是 noexcept 吗?