我在這里遇到了一個有趣的測驗問題:
撰寫一個包含型別別 T 的翻譯單元,該型別
std::is_empty_v<T>為真,但sizeof(T)大于 1。
我想了一段時間,但沒有解決方案。
如何使一個型別T那std::is_empty_v<T> && sizeof(T) > 1是真的嗎?
uj5u.com熱心網友回復:
std::is_empty檢查是否沒有成員。您可以使用對齊來強制大小大于 1:
struct alignas(2) T {};
static_assert(std::is_empty_v<T>);
static_assert(sizeof(T) > 1);
uj5u.com熱心網友回復:
由于兩個相同的空類不能共享同一個地址,我們可以創建一個繼承空基的類,也有一個空基作為成員,禁止EBO,使其大小大于1。
#include<type_traits>
struct B { };
struct D : B { [[no_unique_address]] B b; };
static_assert(std::is_empty_v<D> && sizeof(D) > 1);
演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371697.html
上一篇:在C 中將向量連接到自身時出錯
