Hipokryzja

std::string linia;
std::getline(std::cin, linia);

Czasami widzę opinie, jak to referencje są niebezpieczne, bo mogą ukrywać efekty uboczne, oraz że tutaj std::getline powinno raczej przyjmować wskaźnik, żeby wszyscy wiedzieli, że linia może zmienić swoją zawartość wewnątrz funkcji.

Ponieważ C jest super i nie pozwala na zmianę zawartości argumentów poprzez funkcję, chyba że widać & (najwyraźniej nawet twórca C++ FQA tak uważa)…

TYP x, y;
// ustaw zmienne
z = f(x, y);
// argumenty się nie zmieniły!

Hahahaha, chyba se żartujecie

typedef char TYP[50];
char* f(char* dest, const char* source)
{
    return strcpy(dest, source);
}

To może być uznawane za argument za tym, żeby nie używać typedefów do C-tablic (z czym też się zgadzam), lecz dla mnie to jest syndrom większego problemu z C – tego, że połowa funkcjonalności jest zupełnie nielogiczna i niekonsekwentna (C-tablice zachowują się zupełnie inaczej niż praktycznie każdy inny typ).

Powyższa demonstracja nie unieważnia tezy, że „argumenty wyjściowe to zło”. Niestety, jest to zło konieczne. C++ na szczęście ma dzisiaj wygodniejsze alternatywy (o czym będzie w kolejnych wpisach)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax