Относительно operator< < и оператор>> нет никакого серьезного основания завести этих друзей операторов. Это верно, что они не должны быть функциями членства, но они не должны быть друзьями, также.
лучшая вещь сделать, создают общедоступную печать (ostream&) и читают (istream&) функции. Затем запишите operator< < и оператор>> с точки зрения тех функций. Это приносит дополнительную пользу разрешения Вам сделать те функции виртуальными, который обеспечивает виртуальную сериализацию.
int
- это псевдоним для Int32
long
- псевдоним для Int64
Их размеры вообще не изменится, просто используйте тот, который вам нужен.
Их использование в вашем коде никоим образом не связано с 32-битными и 64-битными машинами.
РЕДАКТИРОВАТЬ: Что касается комментариев о безопасности потоков. Вот хороший вопрос и ответы, в которых подробно описаны любые проблемы, о которых вам нужно знать. В C # опасно использование Int64 на 32-битном процессоре
На 32-битных и 64-битных машинах:
long
64-битный, это синоним System.Int64
. int
- 32-битный, это синоним System.Int32
. Тебе не о чем беспокоиться. int
- это Int32
- 32-битное целое число со знаком, и оно не изменится, независимо от используемой вами платформы.
См. Спецификация Microsoft C # (раздел 1.3), спецификация ECMA C # (раздел 8.2.1) и спецификация ECMA CLI (раздел 8.2.2).
Целое 32-битное число Long - 64-разрядный
На 32- и 64-разрядных процессорах
Я использовал Int32 в первый год работы с .NET (затем 1.0). В основном это сделано для межъязыковой читаемости, поскольку Int32 в VB выглядит так же, как и в C #. Оглядываясь назад, я вижу, что все это беспокойство было глупым. Используйте собственные типы и не переживайте.