簡體   English   中英

枚舉重載運算符 | constexpr 和運行時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM