12

int と unsigned int は unsigned int を返します。そうすべきですか?

次のコードを検討してください。

#include <boost/static_assert.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/type_traits/is_same.hpp>

class test
{
    static const int          si = 0;
    static const unsigned int ui = 0;

    typedef BOOST_TYPEOF(si + ui) type;
    BOOST_STATIC_ASSERT( ( boost::is_same<type, int>::value ) ); // fails
};


int main()
{
    return 0;
}
4

3 に答える 3

16

「そうあるべき」とは、「私のコンパイラは標準に従って動作するか」という意味です:はい

C ++ 2003:条項5、段落9:

算術型または列挙型のオペランドを期待する多くの二項演算子は、同様の方法で変換を引き起こし、結果型を生成します。目的は、結果のタイプでもある共通のタイプを生成することです。このパターンは通常の算術変換と呼ばれ、次のように定義されます。

  • 何とか
  • そうでなければ、何とか
  • その他、何とか ..。
  • それ以外の場合、一方のオペランドが符号なしの場合、もう一方は符号なしに変換されます。

「そうあるべきである」とは、「そうでなければ、世界はより良い場所になるだろう」という意味です。私はそれに答える能力がありません。

于 2012-04-06T18:36:31.370 に答える