10.x — Podsumowanie i rozdział 10 quiz

Świetna robota, że ​​dotarłeś tak daleko. Standardowe reguły konwersji są dość złożone — nie martw się, jeśli nie rozumiesz każdego niuansu.

Przegląd rozdziału

Proces konwersji wartości z jednego typu danych na inny nazywa się a konwersja typu.

Niejawna konwersja typu (tzw automatyczna konwersja typów lub przymus) jest wykonywana zawsze, gdy oczekiwany jest jeden typ danych, ale dostarczany jest inny typ danych. Jeśli kompilator będzie w stanie dowiedzieć się, jak przeprowadzić konwersję między dwoma typami, tak się stanie. Jeśli nie wie, jak to zrobić, zakończy się niepowodzeniem z powodu błędu kompilacji.

Język C++ definiuje szereg wbudowanych konwersji pomiędzy swoimi podstawowymi typami (a także kilka konwersji dla bardziej zaawansowanych typów) zwanych standardowe konwersje. Należą do nich promocje liczbowe, konwersje liczbowe i konwersje arytmetyczne.

A promocja numeryczna to konwersja niektórych mniejszych typów liczbowych na pewne większe typy liczbowe (zwykle int lub double), dzięki czemu procesor może operować na danych odpowiadających naturalnemu rozmiarowi danych procesora. Promocje liczbowe obejmują zarówno promocje integralne, jak i promocje zmiennoprzecinkowe. Promocje numeryczne są zachowujące wartość, co oznacza, że ​​nie następuje utrata wartości ani precyzji. Nie wszystkie konwersje poszerzające są promocjami.

A konwersja numeryczna to konwersja typów pomiędzy typami podstawowymi, która nie jest promocją numeryczną. A zawężająca konwersja to konwersja numeryczna, która może skutkować utratą wartości lub precyzji.

W C++ niektóre operatory binarne wymagają, aby ich operandy były tego samego typu. Jeśli podano operandy różnych typów, jeden lub oba operandy zostaną niejawnie przekonwertowane na pasujące typy przy użyciu zestawu reguł nazywanych zwykłymi konwersjami arytmetycznymi.

Jawna konwersja typu jest wykonywana, gdy programista jawnie żąda konwersji poprzez rzutowanie. A rzucać reprezentuje żądanie programisty dotyczące jawnej konwersji typu. C++ obsługuje 5 typów rzutowania: C-style casts, static casts, const casts, dynamic casts, I reinterpret casts. Generalnie należy unikać C-style casts, const casts, I reinterpret casts. static_cast służy do konwertowania wartości z jednego typu na wartość innego typu i jest zdecydowanie najczęściej używanym rzutowaniem w C++.

Definicje typów i wpisz aliasy pozwolić programiście na utworzenie aliasu dla typu danych. Aliasy te nie są nowymi typami i działają identycznie jak typ aliasowany. Typedefs i aliasy typów nie zapewniają żadnego rodzaju bezpieczeństwa typów i należy zachować ostrożność, aby nie zakładać, że alias jest inny niż typ, który aliasuje.

Klasa automatyczny słowo kluczowe ma wiele zastosowań. Po pierwsze, można zastosować auto odliczenie typu (tzw wnioskowanie typu), który wydedukuje typ zmiennej z jej inicjatora. Wpisz deduction, usuwa const i referencje, więc pamiętaj, aby dodać je z powrotem, jeśli chcesz.

Auto może być również użyte jako typ zwracany przez funkcję, aby kompilator wywnioskował typ zwracany przez funkcję na podstawie instrukcji zwrotnych funkcji, chociaż należy tego unikać w przypadku normalnych funkcji. Auto jest używane jako część końcowa składnia powrotu.

Czas quizu

Pytanie nr 1

Jaki rodzaj konwersji ma miejsce w każdym z poniższych przypadków? Prawidłowe odpowiedzi to: Nie jest wymagana żadna konwersja, promocja liczbowa, konwersja liczbowa, nie zostanie skompilowana z powodu zawężającej się konwersji. Przypuszczać int i long oba mają 4 bajty.

int main()
{
    int a { 5 }; // 1a
    int b { 'a' }; // 1b
    int c { 5.4 }; // 1c
    int d { true }; // 1d
    int e { static_cast<int>(5.4) }; // 1e

    double f { 5.0f }; // 1f
    double g { 5 }; // 1g

    // Extra credit section
    long h { 5 }; // 1h

    float i { f }; // 1i (uses previously defined variable f)
    float j { 5.0 }; // 1j

}

1a) Pokaż rozwiązanie

1b) Pokaż rozwiązanie

1c) Pokaż rozwiązanie

1d) Pokaż rozwiązanie

1e) Pokaż rozwiązanie

1f) Pokaż rozwiązanie

1g) Pokaż rozwiązanie

1h) Pokaż rozwiązanie

1i) Pokaż rozwiązanie

1j) Pokaż rozwiązanie

Pytanie nr 2

2a) Zaktualizuj następujący program, aby używał aliasów typów dla wartości stopni i radianów:

#include <iostream>

namespace constants
{
    constexpr double pi { 3.14159 };
}

double convertToRadians(double degrees)
{
    return degrees * constants::pi / 180;
}

int main()
{
    std::cout << "Enter a number of degrees: ";
    double degrees{};
    std::cin >> degrees;

    double radians { convertToRadians(degrees) };
    std::cout << degrees << " degrees is " << radians << " radians.\n";

    return 0;
}

Pokaż rozwiązanie

2b) Biorąc pod uwagę definicje degrees i radians w poprzednim rozwiązaniu quizu, wyjaśnij, dlaczego poniższa instrukcja zostanie skompilowana lub nie:

radians = degrees;

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:  
166 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze