Строгая проверка типов в C++

Возврат массива из функции C++ Программирование и разработка

Строгая проверка типов означает, что прототип функции (подпись функции ) должен быть известен для каждой вызываемой функции, а вызываемая функция должна соответствовать прототипу функции. Это делается во время компиляции. «Строго типизированный язык» относится к очень строго типизированному языку, в котором существуют более строгие ограничения на то, как операции могут выполняться над переменными разных типов.

Основные условия:

  • для каждой операции: количество, порядок и типы данных ее аргументов.
  • для каждой переменной: имя и тип данных каждого объекта.
  • также для каждой константы: имя, тип данных и значение.

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

Прототип функции указывает имя функции и количество переданных аргументов, а также тип возвращаемого значения (если есть) функции.

Например:

void max ( int , int );
int max ( int , int );
void max();

1. Компилятор предупреждает пользователей, если функция вызывается с неправильными типами данных. Это помогает пользователю выявлять ошибки в вызове функции и повышает надежность программы.

2. Проверенный путь выполнения: как и при строгой проверке типов, проверяются все возможные пути выполнения, и дальнейшее тестирование ошибок типов не требуется. Таким образом, теги типов для объектов данных во время выполнения не нужны, и не требуется динамическая проверка.
С++

#include <iostream>
using namespace std;
void add(int a, double b)
{
    // printing a and b
    cout << "sum = " << (a + b);
}
void add(double a, int b)
{
    // printing a and b
    cout << endl << "sum = " << (a + b);
}
int main()
{
    // calling function on line 3
    add(10, 2.5);
    // calling function on line 7
    add(5.5, 6);
    return 0;
}

Выход:

sum = 12.5
sum = 11.5

Исходя из этого, C++ является строго типизированным языком и использует строгую проверку типов. У компилятора нет путаницы в том, какую функцию вызывать, потому что она соответствует типам аргументов во время компиляции.

Читайте также:  Какой язык программирования лучше

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

С++

#include <iostream>
using namespace std;
void add(int a, double b)
{
    // printing a and b.
    cout << "sum=" << (a + b);
}
void add(double a, int b)
{
    // printing a and b.
    cout << endl << "sum=" << (a + b);
}
int main()
{
    // calling add function on line 4.
    add(10, 2.5);
    // calling add function with 3
    // parameters that will give
    // error.
    add(5.5, 6, 7);
    return 0;
}

Ошибка:

prog.cpp: In function ‘int main()’:
prog.cpp:24:18: error: no matching function for call to ‘add(double, int, int)’
     add(5.5, 6, 7);
                  ^
prog.cpp:4:6: note: candidate: void add(int, double)
 void add(int a, double b)
      ^
prog.cpp:4:6: note:   candidate expects 2 arguments, 3 provided
prog.cpp:10:6: note: candidate: void add(double, int)
 void add(double a, int b)
      ^
prog.cpp:10:6: note:   candidate expects 2 arguments, 3 provided

Это приводит к ошибке, так как параметры функции не совпадают с количеством аргументов в функции add. Преимущество строгой проверки типов заключается в том, что она позволяет обнаруживать многие ошибки типов на ранних этапах цикла разработки. Строгая типизация обычно приводит к более быстрому выполнению скомпилированного кода, потому что, когда компилятор знает точные типы данных, которые используются, он может создавать оптимизированный машинный код.

Оцените статью
bestprogrammer.ru
Добавить комментарий