![](/img/trans.png)
[英]templated operator "+" overloading and enum initialization [constexpr][msvc]
[英]enum overloading operator | constexpr and runtime
我有一個預先聲明的枚舉:
enum class TheEnum : std::uint32_t;
其次是運算符重載:
constexpr TheEnum operator|(TheEnum const a, TheEnum const b)
{
return TheEnum(std::uint32_t(a) | std::uint32_t(b));
}
根據定義:
enum class TheEnum : std::uint32_t
{
A = 1 << 0,
B = 1 << 1,
C = 1 << 2,
D = 1 << 3,
Val0 = TheEnum::A | TheEnum::C,
Val1 = TheEnum::A | TheEnum::D,
Val2 = TheEnum::B | TheEnum::D
};
我試着讓運營商| constexpr 和不是 constexpr 在同一時間。 目前,如果我添加(不是 constexpr):
inline TheEnum operator|(TheEnum const a, TheEnum const b)
{
return TheEnum(std::uint32_t(a) | std::uint32_t(b));
}
我的編譯器說它已經定義了。 constexpr 允許我執行一些 typetrait 操作,但我需要相同的運算符進行運行時評估。
constexpr
上的constexpr
意味着可以在編譯時評估該函數。 這並不意味着它在編譯時進行評估。
您想聲明您的函數constexpr
,這對於編譯時和運行時使用來說就足夠了。
您不能聲明兩個僅在constexpr
和/或inline
上不同的函數。 這些說明符不是函數簽名的一部分,因此不會確定函數的單獨重載。 無論您是否使用它們,您都指的是同一個實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.