Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wykrzyknik przed nazwą zmiennej lub funkcji

Ostatnio zmodyfikowano 2013-11-16 18:48
Autor Wiadomość
leon_w
Temat założony przez niniejszego użytkownika
[C++] Wykrzyknik przed nazwą zmiennej lub funkcji
» 2013-11-16 18:11:32
Przechodzę po kolej kursy c++ z tej strony. Na poziomie 4, przy operacjach na plikach tekstowych pojawił się wykrzyknik przed np. nazwą funkcji lub metodą "good". Nie mogę znaleźć jaką funkcję pełni wykrzyknik w tych przykładach. Będę wdzięczny jeśli ktoś mi to wyjaśni.
P-96348
Buby
» 2013-11-16 18:14:04
Negacja czyli odwrotnosc.
Przyklad:

!std::cin.good(); /* Oznacza to samo co ---> */ std::cin.fail();
P-96350
leon_w
Temat założony przez niniejszego użytkownika
» 2013-11-16 18:29:37
Dzięki za odpowiedź.
Czyli np metoda
if( !plik.good() )
oznacza "jeśli pliku nie udało się wczytać"
a
if( !jakasfunkcja )
"jeśli funkcja zwróci false"
P-96353
pekfos
» 2013-11-16 18:30:27
Na poziomie 4, przy operacjach na plikach tekstowych pojawił się wykrzyknik przed np. nazwą funkcji lub metodą "good". Nie mogę znaleźć jaką funkcję pełni wykrzyknik w tych przykładach.
Pewnie dlatego nie możesz znaleźć tego w poziomie 4, bo zostało to omówione 3 poziomy wcześniej.

Negacja
Negacja logiczna.

!std::cin.good(); /* Oznacza to samo co ---> */ std::cin.fail();
Nieprawda.

if( !plik.good() )
 oznacza "jeśli pliku nie udało się wczytać"
"Jeśli jest ustawiona jakakolwiek flaga błędu".

a
if( !jakasfunkcja )
 "jeśli funkcja zwróci false"
To nie jest wywołanie. "Jeśli adres funkcji jest równy 0".
P-96354
Buby
» 2013-11-16 18:37:08
@ UP:

W głębokim uogólnieniu oznacza to samo, a przynajmniej działa tak samo.

Przetestowałem to co napisałem wyżej w następujący sposób.
C/C++
#include <iostream>

int main()
{
    int x;
   
    std::cin >> x;
    if( !std::cin.fail() )
    {
        std::cout << "Dobrze";
    }
   
    if( !std::cin.good() )
    {
        std::cout << "Zle";
    }
   
}

Jeśli wpisze liczbę to output jest dobrze, a jeśli literę lub wyraz,
to output jest źle.

Jaka więc jest dokładnie różnica? :)

P.S
Tworząc układy w Electronics Workbench, też mam bramki negacji,
i działają tak jak wykrzyknik. Innymi słowy mówiąc, jeśli coś mi
nie zwraca takiej wartości jaką oczekuje wrzucam negację i po
kłopocie.
P-96356
pekfos
» 2013-11-16 18:39:26
Jaka więc jest dokładnie różnica? :)
Dla samego eofbita, obie metody zwracają false.
P-96358
DejaVu
» 2013-11-16 18:43:51
W głębokim uogólnieniu oznacza to samo, a przynajmniej działa tak samo.
@Buby: negacja to nie to samo co negacja logiczna i nie to samo co negacja bitowa.

Negacja logiczna zamienia prawdę na fałsz. Prawdą może być wartość 1 jak i wartość 12345, fałszem jest zawsze 0.

Negacja bitowa odwróci wszystkie bity, tj. 10101011 zanegowanie da 01010100, co nadal będzie wartością prawdziwą.

Negacja może być liczby ujemnej, np. -1, a ta z kolei nie będzie polegała tylko i wyłącznie na zamianie bitów.

PS. W strumieniach metoda fail() to nie to samo co negacja logiczna good().

/edit: A co do różnic między fail() i good():
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-4​/Wczytywanie-zawartosci-pliku-​a-kontrola-bledow​/485
P-96359
Buby
» 2013-11-16 18:48:51
@DejaVu,
Dziękuje, to przyda mi się nie tylko w programowaniu,
bo z postu Pekfosa zbyt dużo nie zrozumiałem :)

P-96360
« 1 »
  Strona 1 z 1