2014-11-21 130 views

回答

1

相關紙張似乎是N2140。原因基本上是你可以過度對齊類型。給出的例子是你可以製作頁面對齊的數據結構。

(我第一次使用aligned_storage和aligned_union混合起來,很抱歉)。

Aligned_storage在N2140中被描述爲aligned_union的可能基類。 N2140還描述(但不強制)aligned_storage<N, ...>點的實現作爲對齊的char[N]的warpper。顯然你需要N。

因爲它是一個非平凡瑣碎型)

std::aligned_union是POD類型與至少每指定的類型的給定的大小,和取向。這些類型不一定是POD類型,從中可以看出它們不能成爲成員。

你能做什麼,但是,是利用放置新把一個 T[n]在該存儲提供的aligned_union爲 T對齊,其大小至少爲 sizeof(T[n])

+1

這是非常有見地的,我幾乎只爲這個信息+1。但是它如何解釋初始模板參數的存在? – sehe 2014-11-21 20:05:46

+0

那麼,一個'union'和它所包含的最大類型一樣大,當然這個尺寸對於'aligned_union'的'aligned_storage'也足夠了? (除了提到的空param pack的情況外) – rubenvb 2014-11-21 20:22:05

+0

你可以編輯這個答案來讓'[edit]澄清更突出嗎? – Yakk 2014-11-21 21:54:29

3

我打賭這是爲泛型編程的情況下,其中可變類型列表可能是空的。

在這種情況下,有一定的最小尺寸將被使用,這樣你仍然控制對準(就沒有類型採取從對準值)

+0

實際上,規範說如果可變類型列表被傳遞,那麼它是未定義的行爲,如果它是一個空列表([見本](http://en.cppreference.com/w/cpp/types/aligned_union)) – DarthRubik 2016-07-06 00:14:32

相關問題