我試圖理解為什么standard_layout不適用于 ref 型別?
#include <type_traits>
struct X {
int y;
};
static_assert(std::is_standard_layout_v<X>);
static_assert(std::is_standard_layout_v<X&>); // does not compile
uj5u.com熱心網友回復:
如您所見,is_standard_layout僅適用于物件型別,而不適用于參考。
因此,如果你想要一個型別或一個型別的參考,你可以使用:
static_assert(std::is_standard_layout_v<std::remove_reference_t<X>>);
remove_reference_t將產生參考的型別作為參考,或者如果您傳遞的不是參考,則產生型別本身(注意:對于較舊的編譯器,您可以使用std::remove_reference<T>::type)。
uj5u.com熱心網友回復:
因為標準布局型別是由[basic.types] 中的標準定義的:
- 標量型別
- 標準布局型別別
- 這種型別的陣列和
- 這些型別的 cv 限定版本
統稱為標準布局型別。
構成標準布局型別別的事物串列相當長(參見 [class]),但參考顯然不是類。
特別是該串列沒有提及參考,因此即使是對標準布局型別(如intor float const[16])的參考也不是標準布局本身。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/455166.html
上一篇:為什么有指標未使用但設定變數警告
