@Ed, я немного сдержан о регистрации этого, поскольку это немного больше, чем придирается к мелочам. Однако я указал бы что в Вашем примере кода:
MyClass c;
if (obj is MyClass)
c = obj as MyClass
, Если Вы собираетесь использовать '', почему развивают его с безопасным броском, использующим 'как'? Если Вы установили, что obj является действительно MyClass, стандартный трясиной состав исполнителей:
c = (MyClass)obj
... никогда не собирается перестать работать.
Точно так же Вы могли просто сказать:
MyClass c = obj as MyClass;
if(c != null)
{
...
}
я не знаю достаточно о внутренностях.NET, чтобы быть уверенным, но мои инстинкты говорят мне, что это сократило бы максимум два, вводят, разрушает операции к максимуму одного. Это, едва ли вероятно, исчерпает финансовые ресурсы обработки так или иначе; лично, я думаю последний инструмент для очистки взглядов формы также.
в Visual Studio вам также предлагается __int3264, который делает то же самое, что и INT_PTR ...
Если вы ищете что-то стандартное, вам не повезло. Стандарт не определяет размер каких-либо встроенных типов данных.
Обратите внимание, что INT_PTR
не подразумевает арифметические действия с указателями. Я имею в виду, что тип будет иметь тот же размер, что и void *
, что вам и нужно. Однако он не будет работать на всех платформах (я почти уверен, что это зависит от Windows).
В стандарте не упоминаются конкретные требования к размеру, только то, что каждый интегральный тип должен обеспечивать по крайней мере такой же объем памяти, как и предыдущий тип. Таким образом, int
должен содержать столько же, сколько short
и так далее. Вам лучше указать, для чего они вам нужны.
Если вы ищете целые числа, размер которых не меняется в зависимости от операционной среды, взгляните на Библиотеку Boost Integer или Заголовок C99 / C ++ 11
. Он содержит такие типы, как uint32_t
/ int32_t
и uintmax_t
/ intmax_t
.
Что наиболее важно, исходя из вашего вопроса, он имеет : uintptr_t
/ intptr_t
.
Это действительно зависит от компилятора. Я думаю, что единственный (более или менее) надежный способ - использовать такой тип указателя, как (void *).
Я думаю, что лучший способ - использовать некоторую условную обработку в вашем файле заголовка и установить собственный тип:
#ifdef _WIN64
typedef __int64 NATIVEINT;
#else
typedef __int32 NATIVEINT;
#endif
(этот образец для Visual C ++)
Это может вам помочь: http://lists.debian.org/debian-user/2006/04/msg00681.html . К сожалению, ваш вопрос зависит от компилятора.