Что такое Совместимый “международный” тип в обоих окнах на 64 бита и на 32 бита в C++?

@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, чтобы быть уверенным, но мои инстинкты говорят мне, что это сократило бы максимум два, вводят, разрушает операции к максимуму одного. Это, едва ли вероятно, исчерпает финансовые ресурсы обработки так или иначе; лично, я думаю последний инструмент для очистки взглядов формы также.

6
задан Piotr Dobrogost 21 April 2012 в 22:36
поделиться

5 ответов

в Visual Studio вам также предлагается __int3264, который делает то же самое, что и INT_PTR ...

3
ответ дан 10 December 2019 в 00:42
поделиться

Если вы ищете что-то стандартное, вам не повезло. Стандарт не определяет размер каких-либо встроенных типов данных.

Обратите внимание, что INT_PTR не подразумевает арифметические действия с указателями. Я имею в виду, что тип будет иметь тот же размер, что и void * , что вам и нужно. Однако он не будет работать на всех платформах (я почти уверен, что это зависит от Windows).

3
ответ дан 10 December 2019 в 00:42
поделиться

В стандарте не упоминаются конкретные требования к размеру, только то, что каждый интегральный тип должен обеспечивать по крайней мере такой же объем памяти, как и предыдущий тип. Таким образом, int должен содержать столько же, сколько short и так далее. Вам лучше указать, для чего они вам нужны.

Если вы ищете целые числа, размер которых не меняется в зависимости от операционной среды, взгляните на Библиотеку Boost Integer или Заголовок C99 / C ++ 11 . Он содержит такие типы, как uint32_t / int32_t и uintmax_t / intmax_t .

Что наиболее важно, исходя из вашего вопроса, он имеет : uintptr_t / intptr_t .

3
ответ дан 10 December 2019 в 00:42
поделиться

Это действительно зависит от компилятора. Я думаю, что единственный (более или менее) надежный способ - использовать такой тип указателя, как (void *).

Я думаю, что лучший способ - использовать некоторую условную обработку в вашем файле заголовка и установить собственный тип:

#ifdef _WIN64
  typedef __int64 NATIVEINT;
#else
  typedef __int32 NATIVEINT;
#endif

(этот образец для Visual C ++)

1
ответ дан 10 December 2019 в 00:42
поделиться

Это может вам помочь: http://lists.debian.org/debian-user/2006/04/msg00681.html . К сожалению, ваш вопрос зависит от компилятора.

0
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: