簡體   English   中英

C ++ constexpr在編譯時

[英]C++ constexpr at compile time

我是否認為只應在編譯時評估此函數,或者是否存在運行時成本?

template <typename T>
size_t constexpr CompID() {
    return typeid(T).hash_code();
}

struct Foo {};

int main(int argc, const char * argv[]) {
    size_t foo = CompID<Foo>();
    return 0;
}

constexpr函數允許在編譯時評估函數,但不需要,所以你的答案是“也許”。 這取決於編譯器的優化設置。

§7.1.5[dcl.constexpr] / 7

constexpr函數的調用產生與在所有方面調用等效非constexpr函數相同的結果,除了對constexpr函數的調用可以出現在常量表達式中。

如果您希望沒有運行時成本,可以通過將其分配給constexpr變量來強制進行編譯時評估,例如

constexpr auto foo = CompID<Foo>();

另請注意, 無法在編譯時評估 type_info.hash_code() (它不是constexpr函數,§18.7.1[type.info] / 7)。 所以你的代碼實際上是錯的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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