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