Можно ли параметры в прототипе писать так? Если да, то почему нельзя написать параметры с переменными?

112
11 сентября 2019, 18:10

Пример из книги Р. Лафоре. Зачем автор написал в прототипе функции параметры без переменной. Какой от этого толк? Есть ли какие-то преимущества такой записи? В чём смысл? Почему нельзя было просто как обычно написать в прототипе (int &num1, int &num2)???

#include <iostream>
#include <conio.h>
using namespace std;
int main() {
    void order(int &, int &); //прототип
    int n1 = 99, n2 = 11;
    int n3 = 22, n4 = 88;
    order(n1, n2);
    order(n3, n4);
    cout << "n1 = " << n1 << endl;
    cout << "n2 = " << n2 << endl;
    cout << "n3 = " << n3 << endl;
    cout << "n4 = " << n4 << endl;
    _getch();
    return 0;
}
void order(int &num1, int &num2) {
    if (num1 > num2) {
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }
}
Answer 1

Вы можете писать, как с именами параметров, так и без них. В стандарте C++ не указано обязательное наличие имен для параметров в прототипах функций. Преимущества: краткость. Недостатки: сложно понять, зачем нужен тот или иной параметр.

Answer 2

А зачем они в прототипе? Они все равно не используются; все, что нужно знать компилятору - это типы параметров.

Ну, а вот при определении функции, когда вы описываете, что с этими параметрами делаете - без имени не обойтись...

P.S. В объявлении имена могут носить описательный характер - тогда они на своем месте - например, что-то вроде search(int * table_to_search, int element, bool(*equal_func)(int,int)) - ну, чтоб было понятно, что за аргументы передавать в функцию. num1 и num2 никакой дополнительной ясности не вносят...

READ ALSO
Преимущество передачи по значению

Преимущество передачи по значению

Отрывок из C++ Core Guidelines:

118
Clion и cmake:изменить (добавить) переменную окружения перед запуском приложения

Clion и cmake:изменить (добавить) переменную окружения перед запуском приложения

Имеется приложение, которое выводит содержимое переменной окружения:path

98
Redis VS hash map для C++?

Redis VS hash map для C++?

В общем, нашел интересную статью на хабре: https://habrcom/ru/company/mailru/blog/323242/

117