簡體   English   中英

為什么 std::declval 不是 constexpr?

[英]Why is std::declval not constexpr?

如題 - 為什么這樣的代碼在 cpp 中是非法的?

static_assert(std::declval<std::array<int, 4>>().size() == 4);

它是標准的忽視還是有一些更深層次的理由為什么std::declval不是constexpr

這一行:

static_assert(std::declval<std::array<int, 4>>().size() == 4);

無法編譯,因為您在評估的上下文中使用declval 這是不允許的,如果你這樣做,你的程序是錯誤的。 declval只能在未評估的上下文中調用,例如在decltypesizeof中。

制作 function constexpr意味着它可以在運行時或編譯時調用。 由於declval根本無法被調用,因此將其constexpr毫無意義。 我想將其設為constexpr不會有任何危害,但無論哪種方式,都沒關系。

暫無
暫無

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

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