也许我错过了什么,但我找不到任何提示: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 在可能的情况下默认为 constexpr
和 P0170 .
关于c++ - constexpr if 的等效三元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011900/