LINUX.ORG.RU

История изменений

Исправление zaz, (текущая версия) :

Я не претендую на звание знатока в этой области, поэтому могу высказать свое мнение по этому вопросу. Я опираюсь на следующее понятие слабой/сильной типизации (как наиболее понятное для меня):

Cистема типов называется «сильной», если она исключает возможность возникновения ошибки согласования типов времени выполнения.

Это конечно тоже не совсем то что у меня в голове но тем не мение, я сщитаю что то о чем пишете вы - это автоматическое приведение типов в С/С++ а уже само приведение типов может быть как сильным так и слабым. Например:

float int2float(int v) {
   return v;
}
Здесь компилятор автоматически произведет сильное приведение типов (по сути будет создана новая переменная и произведена полноценная конвертация типов). Почему приведение сильное? Потомучто при любом вызове in2float код функции отработает корректно. И второй пример:
void int2float(int v, void *floatRes) {
   *(reinterpret_cast<float*>) = v;
}
Вот как раз сдесь проявляется слабая типизация C/C++ потомучто мы можем вызвать int2float и в качетсве второго параметра передать совсем не указатель на float, а например указатель на double - но поскольку float и double имеют различную структуру мы получим неверное число в результате из за «ошибки согласования типов времени выполнения».

С «C» все немного запутано поскольку там нет синтаксического разделения приведения типов, а вот в С++ есть 2 слабых приведения типов: reinterpret + const. И 2 сильных dynamic + static.

Данная проблема мне видится както так (с точки зрения С/С++). По крайней мере автоматическое приведение типов есть и в Java (первый вариант int2float в ней допустим) - а это язык с сильной типизацией.

Исходная версия zaz, :

Я не претендую на звание знатока в этой области, поэтому могу высказать свое мнение по этому вопросу. Я опираюсь на следующее понятие слабой/сильной типизации (как наиболее понятное для меня):

Cистема типов называется «сильной», если она исключает возможность возникновения ошибки согласования типов времени выполнения.

Это конечно тоже не совсем то что у меня в голове но тем не мение, я сщитаю что то о чем пишете вы - это автоматическое приведение типов в С/С++ а уже само приведение типов может быть как сильным так и слабым. Например:

float int2float(int v) {
   return v;
}
Здесь компилятор автоматически произведет сильное приведение типов (по сути будет создана новая переменная и произведена полноценная конвертация типов). Почему приведение строгое? Потомучто при любом вызове in2float код функции отработает корректно. И второй пример:
void int2float(int v, void *floatRes) {
   *(reinterpret_cast<float*>) = v;
}
Вот как раз сдесь проявляется слабая типизация C/C++ потомучто мы можем вызвать int2float и в качетсве второго параметра передать совсем не указатель на float, а например указатель на double - но поскольку float и double имеют различную структуру мы получим неверное число в результате из за «ошибки согласования типов времени выполнения».

С «C» все немного запутано поскольку там нет синтаксического разделения приведения типов, а вот в С++ есть 2 слабых приведения типов: reinterpret + const. И 2 сильных dynamic + static.

Данная проблема мне видится както так (с точки зрения С/С++). По крайней мере автоматическое приведение типов есть и в Java (первый вариант int2float в ней допустим) - а это язык с сильной типизацией.