Форум программистов, компьютерный форум, киберфорум
Наши страницы

Отличие способов приведения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужно исправить шибки в коде http://www.cyberforum.ru/cpp-beginners/thread1107548.html
Задание : в каждом ряде а(n,m) найти самый большой елемент и поменять его местами с соответствующим диагональным елементом. Но програма вот чтото не работает( Помогите исправить ошибки( ...
C++ Определить, содержится ли заданное слово в тексте Помогите написать программу. Дан файл, содержащий произвольный текст. Ввести с клавиатуры слово. Определить, содержится ли заданное слово в тексте. Вывести слово на экран (Слова могут разделяться... http://www.cyberforum.ru/cpp-beginners/thread1107539.html
C++ Boost::thread vs std::thread
Доброго времени суток, решил углубить свои знания, и решил почитать про потоки, бустовые и те что в 11 стандарте приняли, с бустом все ясно понятно, а вот стандартные меня ввели в ступор например,...
C++ Ошибка в строке содержащую мин и макс элемент массива
#include <iostream> #include <clocale> #include <cstdlib> #include <iomanip> int main() { using namespace std; setlocale(LC_ALL, "Russian"); int str, stlb;
C++ Дайте совет http://www.cyberforum.ru/cpp-beginners/thread1107505.html
Всем привет.У меня такая ситуация сложилась. Я с учительницей по информатике изучаю паскаль. Дошли до процедур и функций. Но учительница сказала, что надо переходить на более серьезную среду...
C++ Зависание програмы и бесконечный while Доброго времени суток! Почему простой: while (true) {} заставляет процесс тупо зависнуть? подробнее

Показать сообщение отдельно
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
28.02.2014, 13:15
Цитата Сообщение от klynxe Посмотреть сообщение
Есть ли отличия между (int) и static_cast<int>?
Отличия будут появляться и пропадать в зависимости от ситуации.
В таком простом случае поведение будет эквивалентно. Одним из достоинств второго способа является простота поиска в коде. Достоинство первого - краткость. Однако в более сложны случаях начинают появляться особенности, которые приведения в стиле Си не позволяют преодолеть, маскируют проблему. Например:
C++
1
2
3
4
5
6
7
8
9
10
void foo(int const * a)
{
    double const * a0 = static_cast<double const *>(a); //нельзя, нужен reinterpret_cast
    double const * a1 = (double const *)a; //можно
    double const * a2 = reinterpret_cast<double const *>(a); //можно, но нельзя без const
 
    int * a3 = static_cast<int *>(a); // нельзя, нужен const_cast
    int * a4 = (int *)a; // можно
    int * a5 = const_cast<int *>(a); // можно
}
Как видно С-style cast плюет на систему типов С++, позволяя обходить ее ограничения (замечу, однако, что иногда оно так и нужно, но ты должен знать что делаешь).
Из-а того, что C-style cast всегда выглядит одинаково, можно замаскировать проблему случайно сняв константность или изменив тип на несовместимый. Последствия этого могут вылезти уже в рантайме, когда будет трудно диагностировать проблему (а ведь его еще и поиском по коду трудно найти).
Вот в таком примере
C++
1
2
3
4
5
template <typename T>
void foo1(T a)
{
    A a1 = (A)a;
}
в зависимости от типов T и A можно получить слабо прогнозируемое поведение. С С++ кастами система типов языка не позволила бы провести многие небезопасные действия, выдав диагностику еще на этапе компиляции.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru