@Gev4ik

Как используются константы и кастинги?

Всем привет! Я только не давно начал изучать C#. Я понимаю как работает константа (некое значение зафиксированно и никак не может быть изменена). С кастингами тоже самое (Явное и неявное). Вообще для чего они и как реально эти данные используются в жизни? Про них везде говорят, но никто не говорит для чего они толком. Кому не тяжело, объясните пожалуйста. Заранее спасибо!
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
В Си++03 константа — это та же переменная, про которую говорится: её нельзя менять, с одним дополнением.
Если эта переменная ещё и целая, при определённых условиях её значение вычисляется при компиляции и может использоваться, например, в шаблонах или массивах.

В Си++11 понятия «нельзя менять» и «вычисляется при компиляции» разделили, добавив ключевое слово constexpr.

Для чего?
1. Обозвать число. Например, 3,1416 — это пи, −128 — минимум signed char, а 16384 — ёмкость промежуточного буфера.
2. Наладить какую-нибудь таблицу данных, которую нельзя менять.
const int FIBONACCI_TABLE[] = { 0, 1, 1, 2, 3, 5, 8, 13 };

3. Сказать: эта переменная передана по указателю/ссылке, но мы её менять не будем.
void sayHello(const std::string& name);
void sayHello(const char* name);


О преобразовании типов. Если мы подали в какую-нибудь операцию или функцию слегка не тот тип, какой хотели, компилятор способен наладить преобразование.
float oneAndHalf = 1.5f;
int one = oneAndHalf; // 1

Это и есть неявное преобразование типа. В данном случае вредное :)

Явное преобразование типа нужно, когда неявное не прокатывает. А именно…
• Компилятор не понимает, какую использовать перегрузку.
• При сравнении знакового числа с беззнаковым — это сравнение можно проводить в знаковом типе, в беззнаковом или в более широком. Не ошибка, но предупреждение.
• Программист запретил неявное преобразование ключевым словом explicit.
• Нужна цепочка из двух преобразований типа.

Явное преобразование бывает тремя способами: вызов конструктора int(1.5), преобразование как в Си (int)1.5 и ключевое слово static_cast static_cast<int>(1.5).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
anton_lazarev
@anton_lazarev
const double pi = 3.14159265358979323846;

std::cout << whatever * pi << endl;
std::cout << whatever * 3.14159265358979323846 << endl;


думаю первый вариант куда нагляднее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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