1.9 -- Wprowadzenie do literałów i operatorów

Literały

Rozważ następujące dwa stwierdzenia:

std::cout << "Hello world!";
int x { 5 };

Co to jest „Witaj, świecie!” i „5”? Są dosłowne. A literal (znany również jako stała literałowa) to stała wartość wstawiona bezpośrednio do kodu źródłowego.

Zarówno literały, jak i zmienne mają wartość (i typ). W przeciwieństwie do zmiennej (której wartość można ustawić i zmienić odpowiednio poprzez inicjalizację i przypisanie), wartość literału jest stała i nie można jej zmienić. Literał 5 zawsze ma wartość 5. Dlatego literały nazywane są stałymi.

Aby jeszcze bardziej podkreślić różnicę między literałami a zmiennymi, przeanalizujmy ten krótki program:

#include <iostream>

int main()
{
    std::cout << 5 << '\n'; // print the value of a literal

    int x { 5 };
    std::cout << x << '\n'; // print the value of a variable
    return 0;
}

W linii 5 drukujemy wartość 5 na konsoli. Kiedy kompilator to skompiluje, wygeneruje kod, który powoduje std::cout wypisanie wartości 5. Ta wartość 5 jest wkompilowana do pliku wykonywalnego i może być użyta bezpośrednio.

W linii 7 tworzymy zmienną o nazwie x i inicjujemy ją wartością 5. Kompilator wygeneruje kod, który kopiuje wartość literału 5 do dowolnego miejsca w pamięci podanego x. W linii 8, gdy wypiszemy x, kompilator wygeneruje kod, który powoduje std::cout wypisanie wartości w lokalizacji pamięci x (która ma wartość 5).

Zatem obie instrukcje wyjściowe robią to samo (wypisują wartość 5). Jednak w przypadku literału wartość 5 można wydrukować bezpośrednio. W przypadku zmiennej wartość 5 musi zostać pobrana z pamięci, którą reprezentuje zmienna.

To wyjaśnia również, dlaczego literał jest stały, podczas gdy zmienna może zostać zmieniona. Wartość literału jest umieszczana bezpośrednio w pliku wykonywalnym, a samego pliku wykonywalnego nie można zmienić po jego utworzeniu. Wartość zmiennej jest umieszczona w pamięci, a wartość pamięci można zmienić w trakcie wykonywania działa.

Kluczowa informacja

Literały to wartości wstawiane bezpośrednio do kodu źródłowego. Wartości te zwykle pojawiają się bezpośrednio w kodzie wykonywalnym (chyba że zostały zoptymalizowane).

Obiekty i zmienne reprezentują lokalizacje w pamięci, w których przechowywane są wartości. Wartości te można pobrać na żądanie.

Powiązana treść

Więcej o literałach mówimy na lekcji 5.2 -- Literały.

Operatorzy

W matematyce operacja jest to literał. proces obejmujący zero lub więcej wartości wejściowych (zwanych operandów), który tworzy nową wartość (zwaną wartością wyjściową). Konkretna operacja, którą należy wykonać, jest oznaczona symbolem zwanym operator.

Na przykład, jako dzieci, wszyscy dowiadujemy się, że 2 + 3 jestrówna 5 literały 2 i 3 są operandami, a symbol + jest operatorem, który nakazuje nam zastosować dodawanie matematyczne na operandach w celu uzyskania nowej wartości 5.

W C++ operacje działają zgodnie z oczekiwaniami. Na przykład:

#include <iostream>

int main()
{
    std::cout << 1 + 2 << '\n';

    return 0;
}

W tym programie literały 1 i 2 są operandami operatora plus (+), która generuje wartość wyjściową 3. Ta wartość wyjściowa jest następnie wydawana na konsolę. W C++ wartość wyjściowa operacji jest często nazywana a wartość zwracana.

Prawdopodobnie znasz już standardowe operatory arytmetyczne powszechnie używane w matematyce, w tym dodawanie (+), odejmowanie (-), mnożenie (*) i dzielenie. (/). W C++ przypisanie (=) jest również operatorem, podobnie jak wstawianie (<<), wyodrębnianie (>>) i równość (==). Chociaż większość operatorów ma symbole nazw (np. + lub ==), istnieje również wiele operatorów, które są słowami kluczowymi. (np. new, delete, I throw).

Nota autora

Z powodów, które staną się jasne, gdy omówimy operatory bardziej szczegółowo, w przypadku operatorów będących symbolami powszechne jest dodawanie symbolu operatora do słowa operator.

Na przykład operator plus będzie zapisywany operator+, a operator ekstrakcji operator>>.

Liczba argumentów, które operator przyjmuje jako dane wejściowe, nazywana jest operatora arity. Niewiele osób wie, co oznacza to słowo, więc nie wspominaj o nim w rozmowie i nie spodziewaj się, że ktokolwiek będzie miał pojęcie, o czym mówisz. Operatory w C++ występują w czterech różnych wartościach:

Operatory jednoargumentowe operatory działają na jednym operandzie. Przykładem operatora jednoargumentowego jest operator - . Na przykład dany -5, operator- pobiera operand dosłowny 5 i odwraca jego znak, aby wygenerować nową wartość wyjściową -5.

Binary operatory działają na dwóch operandach (często nazywanych lewym i prawym, ponieważ lewy operand pojawia się po lewej stronie operatora, a prawy operand po prawej stronie operatora). Przykładem operatora binarnego jest operator + . Na przykład dany 3 + 4, operator+ pobiera lewy operand 3 i prawy operand 4 i stosuje dodawanie matematyczne w celu uzyskania nowej wartości wyjściowej 7. Operatory wstawiania (<<) i ekstrakcji (>>) są operatorami binarnymi, przyjmując std::cout lub std::cin po lewej stronie, a wartość wyjściową lub zmienną do wprowadzenia po prawej stronie.

Trójskładnikowe operatory działają na trzech operandach. W C++ występuje tylko jeden taki operator (operator warunkowy), który omówimy później.

Operatory nullarne operatory działają na operandach zerowych. Istnieje również tylko jeden z nich w C++ (operator rzutu), który również omówimy później.

Zauważ, że niektóre operatory mają więcej niż jedno znaczenie w zależności od sposobu ich użycia. Na przykład operator- ma dwa konteksty. Można go użyć w formie jednostkowej do odwrócenia znaku liczby (np. do konwersji 5 Do -5 lub odwrotnie) lub w formie binarnej do wykonania odejmowania (np. 4 - 3).

Operatory łączenia

Operatory można łączyć ze sobą w taki sposób, że dane wyjściowe jednego operatora mogą zostać użyte jako dane wejściowe dla innego operatora. Na przykład, biorąc pod uwagę następująco: 2 * 3 + 4, najpierw wykonuje się operator mnożenia, który konwertuje lewy operand 2 i prawy operand 3 na wartość zwracaną 6 (która staje się lewym operandem dla operatora plus). Następnie wykonuje się operator plus i konwertuje lewy operand 6 i prawy operand 4 na nowy. wartość 10.

Porozmawiamy więcej o kolejności wykonywania operatorów, gdy zagłębimy się w temat operatorów. Na razie wystarczy wiedzieć, że operatory arytmetyczne wykonują się w tej samej kolejności, co w standardowej matematyce: najpierw nawiasy, potem wykładniki, potem mnożenie i dzielenie, a na koniec dodawanie i odejmowanie. Taka kolejność jest czasami w skrócie PEMDAS lub rozszerzony do mnemonika „Proszę przeprosić moją kochaną ciotkę Sally”.

Nota autora

W niektórych krajach PEMDAS jest nauczany jako PEDMAS, BEDMAS, BODMAS lub BIDMAS.

Zwraca wartości i efekty uboczne

Większość operatorów w C++ używa po prostu ich operandy służące do obliczenia wartości zwracanej. Na przykład -5 generuje wartość zwracaną -5 i 2 + 3 generuje wartość zwracaną 5. Istnieje kilka operatorów, które nie generują wartości zwracanych (takich jak delete i throw). Ich działanie omówimy później.

Niektóre operatory mają dodatkowe zachowania. Mówi się, że operator (lub funkcja) ma jakiś zauważalny efekt poza generowaniem wartości zwracanej mają stronę efekt. Na przykład x = 5 ma efekt uboczny w postaci przypisania wartości 5 do zmiennej x. Zmieniona wartość x jest obserwowalna (np. poprzez wydrukowanie wartości x) nawet po zakończeniu wykonywania przez operatora. std::cout << 5 ma efekt uboczny: drukowanie 5 do konsoli Możemy zaobserwować fakt, że 5 został wydrukowany na konsoli nawet po std::cout << 5 zakończeniu wykonywania.

Nomenklatura

W języku potocznym termin „efekt uboczny” jest zwykle używany do określenia wtórnego (często negatywnego lub nieoczekiwanego) rezultatu zdarzenia innego zdarzenia (takiego jak zażycie leku). Na przykład częstym skutkiem ubocznym przyjmowania doustnych antybiotyków jest biegunka. W związku z tym często myślimy o skutkach ubocznych jako o rzeczach, których chcemy uniknąć lub o zdarzeniach, które są przypadkowe w stosunku do głównego celu.

W C++ termin „efekt uboczny” ma inne znaczenie: jest to obserwowalny efekt operatora lub funkcji wykraczający poza wygenerowanie wartości zwracanej.

Ponieważ przypisanie powoduje zauważalną zmianę wartości obiektu, jest to uważane za efekt uboczny. Niektórych operatorów (np. operatora przypisania) używamy głównie ze względu na ich skutki uboczne (a nie na wartość zwracaną przez te operatory). W takich przypadkach efekt uboczny jest zarówno korzystny, jak i przewidywalny (a często jest to wartość zwracana).

Dla zaawansowanych czytelników

W przypadku operatorów, które wywołujemy przede wszystkim ze względu na zwracane wartości (np. operator+ lub operator*), zwykle jest oczywiste, jakie będą zwracane wartości (np. suma lub iloczyn operandów).

W przypadku operatorów wywoływamy przede wszystkim ze względu na ich skutki uboczne (np. operator= lub operator<<), nie zawsze jest oczywiste, jakie wartości zwracane przez nie generują (jeśli w ogóle). Na przykład, jakiej wartości zwracanej można się spodziewać x = 5 ?

Oba operator= i operator<< (kiedy jest używana do wysyłania wartości do konsoli) zwraca lewy operand. Zatem x = 5 zwraca x, I std::cout << 5 zwraca std::cout. Odbywa się to tak, że operatory te można połączyć w łańcuch.

Dla przykład x = y = 5 oceniając jako x = (y = 5). Najpierw y = 5 przypisuje 5 Do y. Ta operacja następnie zwraca y, który można następnie przypisać do x.

std::cout << "Hello " << "world!" oceniając jako (std::cout << "Hello ") << "world!". To najpierw wypisuje "Hello " na konsoli. Ta operacja zwraca std::cout, który można następnie wykorzystać do wydrukowania "world!" na konsoli.

Więcej o kolejności, w jakiej operatory oceniają na lekcji, mówimy 6.1 — Pierwszeństwo operatora i łączność.

Czas quizu

Pytanie nr 1


Dla każdego z poniższych określ, jaki wynik wygenerują:

A)

std::cout << 3 + 4 << '\n';

Pokaż rozwiązanie

B)

std::cout << 3 + 4 - 5 << '\n';

Pokaż rozwiązanie

C)

std::cout << 2 + 3 * 4 << '\n';

Pokaż rozwiązanie

d) Dodatkowy kredyt:

int x { 2 };
std::cout << (x = 5) << '\n';

Pokaż rozwiązanie

guest
Twój adres e-mail nie zostanie wyświetlony
Znalazłeś błąd? Zostaw komentarz powyżej!
Komentarze związane z poprawkami zostaną usunięte po przetworzeniu, aby pomóc zmniejszyć bałagan. Dziękujemy za pomoc w ulepszaniu witryny dla wszystkich!
Awatary z https://gravatar.com/ są połączone z podanym adresem e-mail.
Powiadamiaj mnie o odpowiedziach:  
342 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze