[C++] Wykrzyknik przed nazwą zmiennej lub funkcji
Ostatnio zmodyfikowano 2013-11-16 18:48
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. |
|
Buby |
» 2013-11-16 18:14:04 Negacja czyli odwrotnosc. Przyklad: !std::cin.good(); std::cin.fail(); |
|
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" |
|
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 logiczna. !std::cin.good(); 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". |
|
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. #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. |
|
pekfos |
» 2013-11-16 18:39:26 Jaka więc jest dokładnie różnica? :) |
Dla samego eofbita, obie metody zwracają false. |
|
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 |
|
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 :)
|
|
« 1 » |