constexpr if と同等の三項演算子はありますか? 質問する

constexpr if と同等の三項演算子はありますか? 質問する

何か見逃したのかもしれませんが、ヒントが見つかりません。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;    
};

ベストアンサー1

いいえ、条件演算子はありませんconstexepr。しかし、全体をラムダでラップしてすぐに評価することができます(国際):

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;    
};

最もセクシーなコードではないかもしれませんが、目的は達成できます。ラムダはconstexpr可能な限りデフォルトで使用されていることに注意してください。N4487そしてP0170

おすすめ記事