2012-11-01 23 views
3

C++標準區分內置類型和structclass類型。對於後者,允許超載運算符,例如+,*=&,但不適用於內置類型,當適當的運算符由語言提供時。 AFAIK,標準中沒有提到SSE/AVX類型(但請糾正我),所以應該能夠聲明這些運營商。海灣合作委員會不允許,但國際刑事法院。哪一個是正確的?是C++中的__m128,__m128d,__m256等內置類型?

我真的想要按位操作(如&=),但是,令人煩惱的是,GCC不提供它們(對於__m128),也不允許我聲明它們。

+0

你確定嗎?按位'__m128i&__m128i'至少從gcc-4.4開始工作得很好。它甚至記錄在onlinedocs中。 – hirschhornsalz

+0

@hirschhornsalz是,**但** * 1 *'&'和'&='僅爲'__m128i'定義,而不是'__m128'。 * 2 *如果我只有SSE(而不是SSE2),它沒有被定義,但是內部的_mm_and_ps(__ m128,__ m128)仍然是。所以恕我直言,應該有運算符'&'和'&='__m128'實現使用該內在。順便說一句,我喜歡你的手柄 - 將使用Hirschhornsalz在週末製作Honigkuchen – Walter

回答

8

所有都是正確的。這些類型是C++的擴展,不是內置的(C++中幾乎沒有內容以下劃線開頭)。由於它們是擴展,所以實現可以自由地對其所需的任何限制施加限制。

6

它們不是內置的。 C++不依賴於特定的硬件架構功能。

+3

我不認爲問題是它們是否可以被稱爲* built-in *(這不是標準中的技術術語)是否允許在這些類型上重載運算符。請注意,您也可以將* built-in *(不是標準中的術語)解釋爲*內置編譯器*,在這種情況下,它們可能實際上是內置的(或者不是,它們可能在某些頭文件中定義) –