Никакой неявный интервал-> короткое преобразование в троичном операторе

У Вас есть некоторые доступные инструментарии. Например, существует STL (Стандартная библиотека шаблонов) и Boost/TR1 (расширения STL), которые считают промышленными стандартами (хорошо, STL, по крайней мере). Они предоставляют списки, карты, наборы, совместно использовали указатели, строки, потоки и все виды других удобных инструментов. Лучший из всех, они широко поддерживаются через компиляторы.

Что касается преобразований данных, можно или сделать броски или создать явные функции преобразователя.

Библиотеки - можно или создать статические библиотеки (будьте поглощены в заключительный исполняемый файл), или DLLs (Вы знакомы с ними, уже). MSDN является потрясающим ресурсом для DLLs. Статические библиотеки зависят от Вашей среды сборки.

В целом, это - мой совет: - узнают Ваш предпочтительный IDE очень хорошо - Покупка "C++ Полная Ссылка" Herbert Schildt, которого я считаю, превосходный том на всех вещах C++ (включает STL)

Рассмотрение Вашего образования, Вы должны быть хорошо установлены, после того как Вы делаете обоих из тех.

5
задан Daniel Fischer 10 May 2012 в 15:09
поделиться

3 ответа

Компилятор имеет неявное преобразование из константы выражения в различные примитивные типы (если значение находится в соответствующем диапазоне), но здесь выражение не является постоянным - это просто выражение типа int. Что касается компилятора, это почти то же самое, что:

short s;
s = CallSomeMethodReturningInt32();

.

Есть два варианта - вы можете преобразовать все выражение или преобразовать каждый из двух последних операндов:

short s = (EitherTrueOrFalse()) ? (short) 0 : (short) 1;

, чтобы получить общее выражение введите короткий . В данном конкретном случае жаль, что нет суффикса числового литерала для явного объявления короткого литерала. Очевидно, разработчики языка учли это, но посчитали, что это относительно редкая ситуация. (Думаю, я, наверное, согласен. преобразование выражений позволяет следующие преобразования:

  • константное выражение (§7.18) типа int можно преобразовать в тип sbyte, байт , короткий , ushort , uint или ulong , при условии стоимости константное выражение находится в пределах диапазон типа назначения.
  • A константное выражение типа long может преобразовать в тип ulong , если значение константного выражения не является отрицательным.
11
ответ дан 13 December 2019 в 05:37
поделиться

Поскольку преобразование выполняется компилятором , а не во время выполнения, я бы не назвал его уродливым преобразованием, я бы назвал его сложным синтаксисом:

s = (EitherTrueOrFalse()) ? (short)0 : (short)1;

Я имею в виду, что именно так он написан на C #, даже если он выглядит некрасиво.

См. Эту статью в блоге . См. ответ Марка Гравелла на этот вопрос.

1
ответ дан 13 December 2019 в 05:37
поделиться

Я полагаю, это имеет ту же причину, что и этот код не компилируется:

short s1 = GetShort1();
short s2 = GetShort2();
short s3 = s1 + s2;

Т.е. всякий раз, когда для чего-то используется short, он становится int.

0
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

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