Przekazywanie argumentów do funkcji w dodatkowym nawiasie
Ostatnio zmodyfikowano 2017-03-02 15:13
Anim Temat założony przez niniejszego użytkownika |
Przekazywanie argumentów do funkcji w dodatkowym nawiasie » 2017-03-02 14:06:38 W którymś z wątków z poprzednich dni pojawił się taki kod: #include <iostream> using namespace std;
int A, B; int dod( int liczba );
int main() { cin >> A; cin >> B; cout << dod(( A, B ) ) << endl; return 0; }
int dod( int liczba ) { cout << liczba << endl; liczba = A + B; return liczba; }
Oczywiście pomińmy, że kod jest napisany okropnie. Jednak chciałbym spytać, dlaczego konstrukcja dod((A,B)) nie zwraca błędu i traktuje to jako jeden argument? Dodatkowo dlaczego kompilator uznał, że należy przekazać do funkcji parametr B, a nie A? Pierwszy raz się z czymś takim spotkałem ^^ |
|
Monika90 |
» 2017-03-02 14:14:45 Normalnie przecinek w wywołaniu funkcji oddziela od siebie argumenty przekazywane tej funkcji. Dodatkowe nawiasy powodują jednak, że przecinek jest interpretowany jako operator przecinek (operator przecinek to coś innego niż przecinek separator elementów listy). Więc sprawdź sobie w jakiejś dokumentacji co robi operator przecinek. |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-03-02 14:31:23 Hm. Interesujące. Dziękuję :)
Tylko teraz mam dodatkowe pytanie: Czy jedyną własnością używania operatora przecinka jest "zaoszczędzenie" linii kodu? Bo rozumiem, że zawsze można zastąpić operator przecinka jedną bądź dwoma liniami dodatkowego kodu. Wnioskuję, że nie ma to "własności optymalizacyjnych" - a w związku z tym, czy używanie go nie jest po prostu "brzydką manierą" w C++. Jeśli jestem w błędzie to oczywiście proszę o wyprowadzenie z tego błędu ^^ |
|
Monika90 |
» 2017-03-02 14:54:33 Te operator nie ma wielu sensowych zastosowań. W niektórych miejscach C++ wymaga jednego wyrażenia (np. warunek pętli while), operator przecinek pozwala upchnąć w takich miejscach więcej niż jedno wyrażenie, np. int c; while( c = cin.get(), c != EOF && !isspace( c ) ) { foo( c ); }
Łatwo tu o nadużycia. Pisanie zamiast to nadużycie. I nie ma to żadnego wpływu na wydajność kodu. |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-03-02 15:13:12 Dziękuję :) Zamykam temat :) |
|
« 1 » |