Re[9]: Чем плох Паскаль?
От: AlexRK  
Дата: 18.06.19 10:39
Оценка:
Здравствуйте, netch80, Вы писали:

ARK>>Это тоже верно, но я сейчас говорю про текущую ситуацию — с чистотой функций никто не заморачивается (очень зря), но деление все равно есть из-за псевдотипа void, не позволяющего работать однотипно с произвольными функциями.

N>А чем он так мешает? Ну, присвоить результат нельзя. Так и при не-void его присваивать необязательно.

Речь не о том, мешает или не мешает, а о том, что функции делятся на два мира — нельзя использовать void в обобщенном коде. Приводил же пример выше на псевдокоде. Де-факто void-функции — это ровно то же самое, что и в паскале "procedure".

N>>>2. Если уже говорить про подобные возможности, то надо вспоминать и возврат не одного значения из функции, а многих. В C++, считаем, есть (хоть и криво — ни один ABI это ещё не позволяет напрямую; std::pair, std::tuple приводят к возврату структуры через скрытый параметр — указатель), и можно использовать (да хоть монады на нём строить). В Паскале нет и не ожидается.

ARK>>Я не большой знаток C++ , но не помню, что в нем это "есть". Чтобы использовать пары и туплы для комбинирования, надо, чтобы их не только возвращали, но и принимали входными параметрами, разве нет? Или можно НАПРЯМУЮ сунуть тупл (2, "test") в функцию "void Func(int a, string b)", т.е. вызвать как "Func(myTuple);"?

N>Можно.


Не конпелируется что-то: https://ideone.com/Q3TtwD

#include <iostream>
using namespace std;

void Func(int a, std::string b)
{
    std::cout << a;
    std::cout << b;
}

int main() {
    Func(33, "test");    // работает
    
    std::pair <int,std::string> myPair (33, "test");
    Func(myPair);        // не компилируется
    
    return 0;
}


prog.cpp:14:13: error: cannot convert ‘std::pair<int, std::__cxx11::basic_string<char> >’ to ‘int’ for argument ‘1’ to ‘void Func(int, std::__cxx11::string)’
Func(myPair);
^


Что я делаю не так? Или всё же не можно?

N>Даже в штатной библиотеке какой-нибудь std::map::insert принимает std::pair<> как аргумент.


Это и в паскале можно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.