0
我有一個與C/C++中的對齊有關的問題。在 Determining the alignment of C/C++ structures in relation to its members邁克爾·伯爾張貼了這個宏:其中TYPE_ALIGNMENT()失敗的示例
#define TYPE_ALIGNMENT(t) offsetof(struct { char x; t test; }, test)
在評論有人寫這可能會失敗,非POD類型。有人能給我一個代碼示例,哪裏失敗?
好,但那不是我問的。例如, class foo {int i; virtual void bar(){ } }; int main(){ std :: cout << TYPE_ALIGNMENT(foo)<< std :: endl; return 0; } 工作正常(在Linux x86-64上使用GCC 4.4.3),據我所知未定義至少有一些情況下,它不工作。或者是我對未定義的錯誤的理解? – JustMaximumPower 2010-03-29 14:08:13
@JustMaximumPower:「工作正常」(或者至少看起來工作正常)對於未定義的東西是合理的結果。 「可怕的撞車」是另一個合理的結果。任何事情都可能發生。無論它是否工作或者它在您的軟件中導致有害的錯誤完全取決於實施。假設它適用於非POD類型是不明智的。 – 2010-03-29 14:30:48