2014-08-27 27 views
4

我想在標準(n3242/3291/3290)中的一個指針指定餘數運算符不適用於浮點類型的位置。在標準(C++ 11)中是否說剩餘運算符僅用於整型?

求餘運算符%5.6.2

二進制定義的/操作員產生的商,和二進制%運算收率 的從由第二所述第一表達的除法的餘數。如果 /或%的第二個操作數爲零,則行爲未定義。對於整數操作數 ,如果商a/b在結果類型中可表示,則(a/b)* b + a%b是 等於a,則/運算符會得出捨棄了任何小數部分的代數商 。

我找不到在哪裏禁止使用浮點類型。標準明確將integral operands作爲一種特殊情況的事實可以解釋爲:運算符存在於其他非整數類型中。

我知道MSVC和GCC不接受它,我看了很多關於這個問題的答案,但我無法在C++ 11標準中獲得有效的指針。

+6

你引述的5.6條第4款。你讀過第2段嗎? – 2014-08-27 14:34:51

+0

不回答你的問題,但你知道['std :: modf'](http://en.cppreference.com/w/cpp/numeric/math/modf)? – NicholasM 2014-08-27 14:35:39

回答

11

C++ 11,5.6/2:

*/的操作數應具有算術或無作用域枚舉類型; %的操作數應具有 積分或非範圍枚舉類型。通常的算術轉換是在操作數 上執行的,並確定結果的類型。

(重點煤礦)

+0

謝謝。我搜索了'operator%','remaining operator','binary%'和'%operator',它讓我逃脫了。我會在6分鐘內接受 – fjardon 2014-08-27 14:37:25

相關問題