Система. Преобразовать. ToInt по сравнению с (интервалом)

C99 N1256 стандартная черновик

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

6.5.3.4 Оператор sizeof :

3 При применении к операнду, который имеет структуру или тип объединения, результатом является общее количество байтов в таких объект, включая внутреннюю и конечную прокладку.

blockquote>

6.7.2.1 Спецификаторы структуры и объединения :

13 ... Там может быть неназванным дополнением внутри объекта структуры, но не в начале.

blockquote>

и:

15 В конце структуры может быть неназванное дополнение или объединение.

blockquote>

Новая функция члена C99 с гибким элементом массива (struct S {int is[];};) также может влиять на заполнение:

16 As в специальном случае последний элемент структуры с более чем одним именованным элементом может иметь неполный тип массива; это называется гибким элементом массива. В большинстве ситуаций гибкий элемент массива игнорируется. В частности, размер структуры выглядит так, как если бы гибкий элемент массива был пропущен, за исключением того, что он мог иметь более длинное дополнение, чем подразумевалось.

blockquote>

Приложение J Проблемы с переносимостью повторяет:

Следующие неуказаны: ...

  • Значение байтов заполнения при хранении значений в структурах или объединениях (6.2.6.1)
blockquote>

C ++ 11 Стандартная черновая версия N3337

http://www.open-std.org/jtc1/sc22/wg21/ docs / papers / 2012 / n3337.pdf

5.3.3 Размер :

2 При применении к классу результатом является количество байтов в объекте этого класса, включая любое дополнение, необходимое для размещения объектов этого типа в массиве.

blockquote>

9.2 Члены класса :

Указатель на объект структуры стандартного макета, соответствующим образом преобразованный с использованием reinterpret_cast, указывает на его начальный член (или если этот элемент является битовым полем, то t o единица, в которой он находится) и наоборот. [Примечание. Таким образом, в рамках объекта структуры стандартного макета может быть указано неназванное заполнение, но не в его начале, по мере необходимости, для достижения соответствующего выравнивания. - end note]

blockquote>

Я знаю достаточно C ++, чтобы понять примечание: -)

12
задан Wyzfen 19 September 2008 в 17:50
поделиться

4 ответа

Бросок к интервалу является неявным усечением, не неявным настилом:

double d = -3.14;
int i = (int)d;
// i == -3

Я выбираю Math. Пол или Математика. Вокруг сделать мои намерения более явными.

12
ответ дан 2 December 2019 в 19:56
поделиться

Округление также обрабатывается по-другому:

x =-2.5 (интервала) x =-2 Преобразовывают. ToInt32(x) =-2
x =-1.5 (интервала) x =-1 Преобразовывают. ToInt32(x) =-2
x =-0.5 (интервала) x = 0 Преобразовывают. ToInt32(x) = 0
x = 0.5 (интервал) x = 0 Преобразовывает. ToInt32(x) = 0
x = 1.5 (интервал) x = 1 Преобразовывает. ToInt32(x) = 2
x = 2.5 (интервал) x = 2 Преобразовывает. ToInt32(x) = 2

Заметьте x =-1.5 и x=1.5 случаи.
В некоторых алгоритмах используемый метод округления очень важен для получения правильного ответа.

3
ответ дан 2 December 2019 в 19:56
поделиться

Преобразовать. ToInt32 () используется на строках (http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx), в то время как кастинг может только использоваться на типах, которые имеют внутренние преобразователи (числовые типы). Реальный прием прибывает в решение между Int32. Проанализируйте и Преобразуйте. ToInt32 (). Преобразовать. ToInt32 () терпим к пустому параметру и возвращается 0 в то время как Int32. Синтаксический анализ () бросит ArgumentNullException.

1
ответ дан 2 December 2019 в 19:56
поделиться

Можно использовать, Преобразовывают, когда у Вас есть строка, которую Вы хотите преобразовать в интервал

int i = Convert.ToInt32("1234");

Преобразуйте и кастинг оба выдаст исключение, если они перестанут работать.

т.е., это все еще выдаст исключение, оно не возвратится 0:

Convert.ToInt32("1234NonNumber");

Во многих случаях Преобразуйте, и кастинг будет иметь тот же результат, но бросок часто является временами, легче читать.

1
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

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